Skip to content

Commit c0ae4dd

Browse files
committed
Apply node config overrides before validation
1 parent d14a422 commit c0ae4dd

7 files changed

Lines changed: 153 additions & 44 deletions

File tree

quickwit/quickwit-cli/src/lib.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ use quickwit_common::runtimes::RuntimesConfig;
2626
use quickwit_common::uri::Uri;
2727
use quickwit_config::service::QuickwitService;
2828
use quickwit_config::{
29-
ConfigFormat, DEFAULT_QW_CONFIG_PATH, MetastoreConfigs, NodeConfig, SourceConfig,
30-
StorageConfigs,
29+
ConfigFormat, DEFAULT_QW_CONFIG_PATH, MetastoreConfigs, NodeConfig, NodeConfigOverrides,
30+
SourceConfig, StorageConfigs,
3131
};
3232
use quickwit_indexing::check_source_connectivity;
3333
use quickwit_metastore::{IndexMetadataResponseExt, MetastoreResolver};
@@ -229,12 +229,15 @@ pub fn start_actor_runtimes(
229229
}
230230

231231
/// Loads a node config located at `config_uri` with the default storage configuration.
232-
async fn load_node_config(config_uri: &Uri) -> anyhow::Result<NodeConfig> {
232+
async fn load_node_config(
233+
config_uri: &Uri,
234+
overrides: NodeConfigOverrides,
235+
) -> anyhow::Result<NodeConfig> {
233236
let config_content = load_file(&StorageResolver::unconfigured(), config_uri)
234237
.await
235238
.context("failed to load node config")?;
236239
let config_format = ConfigFormat::sniff_from_uri(config_uri)?;
237-
let config = NodeConfig::load(config_format, config_content.as_slice())
240+
let config = NodeConfig::load(config_format, config_content.as_slice(), overrides)
238241
.await
239242
.with_context(|| format!("failed to parse node config `{config_uri}`"))?;
240243
info!(config_uri=%config_uri, config=?config, "loaded node config");

quickwit/quickwit-cli/src/service.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use futures::future::select;
2222
use itertools::Itertools;
2323
use quickwit_common::runtimes::RuntimesConfig;
2424
use quickwit_common::uri::Uri;
25+
use quickwit_config::NodeConfigOverrides;
2526
use quickwit_config::service::QuickwitService;
2627
use quickwit_serve::tcp_listener::DefaultTcpListenerResolver;
2728
use quickwit_serve::{BuildInfo, EnvFilterReloadFn, reload_tls_cert, serve_quickwit};
@@ -117,14 +118,19 @@ impl RunCliCommand {
117118
debug!(args = ?self, "run-service");
118119
let version_text = BuildInfo::get_version_text();
119120
info!("quickwit version: {version_text}");
120-
let mut node_config = load_node_config(&self.config_uri).await?;
121+
let node_config = load_node_config(
122+
&self.config_uri,
123+
NodeConfigOverrides {
124+
enabled_services: self.services.clone(),
125+
},
126+
)
127+
.await?;
121128
let (storage_resolver, metastore_resolver) =
122129
get_resolvers(&node_config.storage_configs, &node_config.metastore_configs);
123130
crate::busy_detector::set_enabled(true);
124131

125132
if let Some(services) = &self.services {
126133
info!(services = %services.iter().join(", "), "setting services from override");
127-
node_config.enabled_services.clone_from(services);
128134
}
129135
// TODO move in serve quickwit?
130136
let runtimes_config = RuntimesConfig::default();

quickwit/quickwit-cli/src/source.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,7 @@ fn flatten_json(value: JsonValue) -> Vec<(String, JsonValue)> {
614614
}
615615
acc.push((root, value))
616616
}
617+
acc.sort_by(|left, right| left.0.cmp(&right.0));
617618
acc
618619
}
619620

quickwit/quickwit-cli/src/tool.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ use quickwit_common::runtimes::RuntimesConfig;
3131
use quickwit_common::uri::Uri;
3232
use quickwit_config::service::QuickwitService;
3333
use quickwit_config::{
34-
CLI_SOURCE_ID, IndexerConfig, NodeConfig, SourceConfig, SourceInputFormat, SourceParams,
35-
TransformConfig, VecSourceParams,
34+
CLI_SOURCE_ID, IndexerConfig, NodeConfig, NodeConfigOverrides, SourceConfig, SourceInputFormat,
35+
SourceParams, TransformConfig, VecSourceParams,
3636
};
3737
use quickwit_index_management::{IndexService, clear_cache_directory};
3838
use quickwit_indexing::BoxedPipelineHandle;
@@ -400,7 +400,7 @@ pub async fn local_ingest_docs_cli(args: LocalIngestDocsArgs) -> anyhow::Result<
400400
debug!(args=?args, "local-ingest-docs");
401401
println!("❯ Ingesting documents locally...");
402402

403-
let config = load_node_config(&args.config_uri).await?;
403+
let config = load_node_config(&args.config_uri, NodeConfigOverrides::default()).await?;
404404
let (storage_resolver, metastore_resolver) =
405405
get_resolvers(&config.storage_configs, &config.metastore_configs);
406406
let mut metastore = metastore_resolver.resolve(&config.metastore_uri).await?;
@@ -529,7 +529,7 @@ pub async fn local_ingest_docs_cli(args: LocalIngestDocsArgs) -> anyhow::Result<
529529
pub async fn local_search_cli(args: LocalSearchArgs) -> anyhow::Result<()> {
530530
debug!(args=?args, "local-search");
531531
println!("❯ Searching directly on the index storage (without calling REST API)...");
532-
let config = load_node_config(&args.config_uri).await?;
532+
let config = load_node_config(&args.config_uri, NodeConfigOverrides::default()).await?;
533533
let (storage_resolver, metastore_resolver) =
534534
get_resolvers(&config.storage_configs, &config.metastore_configs);
535535
let metastore: MetastoreServiceClient =
@@ -567,7 +567,7 @@ pub async fn local_search_cli(args: LocalSearchArgs) -> anyhow::Result<()> {
567567
pub async fn merge_cli(args: MergeArgs) -> anyhow::Result<()> {
568568
debug!(args=?args, "run-merge-operations");
569569
println!("❯ Merging splits locally...");
570-
let config = load_node_config(&args.config_uri).await?;
570+
let config = load_node_config(&args.config_uri, NodeConfigOverrides::default()).await?;
571571
let (storage_resolver, metastore_resolver) =
572572
get_resolvers(&config.storage_configs, &config.metastore_configs);
573573
let mut metastore = metastore_resolver.resolve(&config.metastore_uri).await?;
@@ -654,7 +654,7 @@ pub async fn garbage_collect_index_cli(args: GarbageCollectIndexArgs) -> anyhow:
654654
debug!(args=?args, "garbage-collect-index");
655655
println!("❯ Garbage collecting index...");
656656

657-
let config = load_node_config(&args.config_uri).await?;
657+
let config = load_node_config(&args.config_uri, NodeConfigOverrides::default()).await?;
658658
let (storage_resolver, metastore_resolver) =
659659
get_resolvers(&config.storage_configs, &config.metastore_configs);
660660
let metastore = metastore_resolver.resolve(&config.metastore_uri).await?;
@@ -784,7 +784,7 @@ async fn extract_split_cli(args: ExtractSplitArgs) -> anyhow::Result<()> {
784784
debug!(args=?args, "extract-split");
785785
println!("❯ Extracting split...");
786786

787-
let config = load_node_config(&args.config_uri).await?;
787+
let config = load_node_config(&args.config_uri, NodeConfigOverrides::default()).await?;
788788
let (storage_resolver, metastore_resolver) =
789789
get_resolvers(&config.storage_configs, &config.metastore_configs);
790790
let metastore = metastore_resolver.resolve(&config.metastore_uri).await?;

quickwit/quickwit-config/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ pub use crate::metastore_config::{
7676
pub use crate::node_config::{
7777
CacheConfig, CachePolicy, DEFAULT_QW_CONFIG_PATH, GrpcConfig, HealthConfig, IndexerConfig,
7878
IngestApiConfig, JaegerConfig, KeepAliveConfig, LambdaConfig, LambdaDeployConfig, NodeConfig,
79-
RestConfig, SearcherConfig, SplitCacheLimits, StorageTimeoutPolicy, TlsConfig,
79+
NodeConfigOverrides, RestConfig, SearcherConfig, SplitCacheLimits, StorageTimeoutPolicy,
80+
TlsConfig,
8081
};
8182
pub use crate::serde_utils::HumanDuration;
8283
use crate::source_config::serialize::{SourceConfigV0_7, SourceConfigV0_8, VersionedSourceConfig};

quickwit/quickwit-config/src/node_config/mod.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -833,15 +833,26 @@ pub struct NodeConfig {
833833
pub jaeger_config: JaegerConfig,
834834
}
835835

836+
/// Values supplied outside the config file and environment, applied before validation.
837+
#[derive(Clone, Debug, Default, Eq, PartialEq)]
838+
pub struct NodeConfigOverrides {
839+
pub enabled_services: Option<HashSet<QuickwitService>>,
840+
}
841+
836842
impl NodeConfig {
837843
pub fn is_service_enabled(&self, service: QuickwitService) -> bool {
838844
self.enabled_services.contains(&service)
839845
}
840846

841847
/// Parses and validates a [`NodeConfig`] from a given URI and config content.
842-
pub async fn load(config_format: ConfigFormat, config_content: &[u8]) -> anyhow::Result<Self> {
848+
pub async fn load(
849+
config_format: ConfigFormat,
850+
config_content: &[u8],
851+
overrides: NodeConfigOverrides,
852+
) -> anyhow::Result<Self> {
843853
let env_vars = env::vars().collect::<HashMap<_, _>>();
844-
let config = load_node_config_with_env(config_format, config_content, &env_vars).await?;
854+
let config =
855+
load_node_config_with_env(config_format, config_content, &env_vars, overrides).await?;
845856
if !config.data_dir_path.try_exists()? {
846857
bail!(
847858
"data dir `{}` does not exist",

0 commit comments

Comments
 (0)