Skip to content

Commit f5c1657

Browse files
ddelemenyfmassot
andauthored
Metastore and index uris default to data-dir, Closes #1137 (#1140)
* [WIP] Refactor default uris in config, see #1137 * [WIP] Improve config getters and deploy to cli * Test default index path config in data-dir * Remove unused config renames * Formatting * Clippy fixes * Impl config's Debug with resolved default uris Co-authored-by: François Massot <[email protected]>
1 parent 5cb07bd commit f5c1657

File tree

7 files changed

+73
-41
lines changed

7 files changed

+73
-41
lines changed

quickwit-cli/src/index.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ pub async fn describe_index_cli(args: DescribeIndexArgs) -> anyhow::Result<()> {
471471
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
472472
let quickwit_config = load_quickwit_config(args.config_uri, args.data_dir).await?;
473473
let metastore = metastore_uri_resolver
474-
.resolve(&quickwit_config.metastore_uri)
474+
.resolve(&quickwit_config.metastore_uri())
475475
.await?;
476476
let index_metadata = metastore.index_metadata(&args.index_id).await?;
477477
let splits = metastore
@@ -700,7 +700,8 @@ pub async fn create_index_cli(args: CreateIndexArgs) -> anyhow::Result<()> {
700700
} else {
701701
let default_index_uri = format!(
702702
"{}/{}",
703-
quickwit_config.default_index_root_uri, index_config.index_id
703+
quickwit_config.default_index_root_uri(),
704+
index_config.index_id
704705
);
705706
info!(
706707
"`index-uri` is not specified in the index configuration. Setting it to `{}`.",
@@ -711,7 +712,7 @@ pub async fn create_index_cli(args: CreateIndexArgs) -> anyhow::Result<()> {
711712

712713
if args.overwrite {
713714
delete_index(
714-
&quickwit_config.metastore_uri,
715+
&quickwit_config.metastore_uri(),
715716
&index_config.index_id,
716717
false,
717718
)
@@ -734,7 +735,7 @@ pub async fn create_index_cli(args: CreateIndexArgs) -> anyhow::Result<()> {
734735
create_timestamp: Utc::now().timestamp(),
735736
update_timestamp: Utc::now().timestamp(),
736737
};
737-
create_index(&quickwit_config.metastore_uri, index_metadata.clone()).await?;
738+
create_index(&quickwit_config.metastore_uri(), index_metadata.clone()).await?;
738739
println!("Index `{}` successfully created.", index_config.index_id);
739740

740741
Ok(())
@@ -755,10 +756,10 @@ pub async fn ingest_docs_cli(args: IngestDocsArgs) -> anyhow::Result<()> {
755756
source_id: INGEST_SOURCE_ID.to_string(),
756757
source_params,
757758
};
758-
run_index_checklist(&config.metastore_uri, &args.index_id, Some(&source)).await?;
759+
run_index_checklist(&config.metastore_uri(), &args.index_id, Some(&source)).await?;
759760
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
760761
let metastore = metastore_uri_resolver
761-
.resolve(&config.metastore_uri)
762+
.resolve(&config.metastore_uri())
762763
.await?;
763764
let index_metadata = metastore.index_metadata(&args.index_id).await?;
764765
let storage_resolver = quickwit_storage_uri_resolver().clone();
@@ -808,7 +809,7 @@ pub async fn search_index(args: SearchIndexArgs) -> anyhow::Result<SearchRespons
808809
let storage_uri_resolver = quickwit_storage_uri_resolver();
809810
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
810811
let metastore = metastore_uri_resolver
811-
.resolve(&quickwit_config.metastore_uri)
812+
.resolve(&quickwit_config.metastore_uri())
812813
.await?;
813814
let search_request = SearchRequest {
814815
index_id: args.index_id,
@@ -841,13 +842,13 @@ pub async fn merge_or_demux_cli(
841842
) -> anyhow::Result<()> {
842843
debug!(args = ?args, merge_enabled = merge_enabled, demux_enabled = demux_enabled, "run-merge-operations");
843844
let config = load_quickwit_config(args.config_uri, args.data_dir).await?;
844-
run_index_checklist(&config.metastore_uri, &args.index_id, None).await?;
845+
run_index_checklist(&config.metastore_uri(), &args.index_id, None).await?;
845846
let indexer_config = IndexerConfig {
846847
..Default::default()
847848
};
848849
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
849850
let metastore = metastore_uri_resolver
850-
.resolve(&config.metastore_uri)
851+
.resolve(&config.metastore_uri())
851852
.await?;
852853
let storage_resolver = quickwit_storage_uri_resolver().clone();
853854
let client = IndexingServer::spawn(
@@ -872,8 +873,12 @@ pub async fn delete_index_cli(args: DeleteIndexArgs) -> anyhow::Result<()> {
872873
quickwit_telemetry::send_telemetry_event(TelemetryEvent::Delete).await;
873874

874875
let quickwit_config = load_quickwit_config(args.config_uri, args.data_dir).await?;
875-
let affected_files =
876-
delete_index(&quickwit_config.metastore_uri, &args.index_id, args.dry_run).await?;
876+
let affected_files = delete_index(
877+
&quickwit_config.metastore_uri(),
878+
&args.index_id,
879+
args.dry_run,
880+
)
881+
.await?;
877882
if args.dry_run {
878883
if affected_files.is_empty() {
879884
println!("Only the index will be deleted since it does not contains any data file.");
@@ -898,7 +903,7 @@ pub async fn garbage_collect_index_cli(args: GarbageCollectIndexArgs) -> anyhow:
898903

899904
let quickwit_config = load_quickwit_config(args.config_uri, args.data_dir).await?;
900905
let deleted_files = garbage_collect_index(
901-
&quickwit_config.metastore_uri,
906+
&quickwit_config.metastore_uri(),
902907
&args.index_id,
903908
args.grace_period,
904909
args.dry_run,

quickwit-cli/src/service.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ async fn run_indexer_cli(args: RunIndexerArgs) -> anyhow::Result<()> {
153153

154154
let config = load_quickwit_config(args.config_uri, args.data_dir_path).await?;
155155
let metastore = quickwit_metastore_uri_resolver()
156-
.resolve(&config.metastore_uri)
156+
.resolve(&config.metastore_uri())
157157
.await?;
158158
let storage_resolver = quickwit_storage_uri_resolver().clone();
159159
let client = IndexingServer::spawn(
@@ -180,7 +180,7 @@ async fn run_searcher_cli(args: RunSearcherArgs) -> anyhow::Result<()> {
180180
let config = load_quickwit_config(args.config_uri, args.data_dir_path).await?;
181181
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
182182
let metastore = metastore_uri_resolver
183-
.resolve(&config.metastore_uri)
183+
.resolve(&config.metastore_uri())
184184
.await?;
185185
run_checklist(vec![("metastore", metastore.check_connectivity().await)]);
186186
run_searcher(config, metastore).await?;

quickwit-cli/src/source.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ impl SourceCliCommand {
224224
async fn add_source_cli(args: AddSourceArgs) -> anyhow::Result<()> {
225225
let config = load_quickwit_config(args.config_uri, None).await?;
226226
let metastore = quickwit_metastore_uri_resolver()
227-
.resolve(&config.metastore_uri)
227+
.resolve(&config.metastore_uri())
228228
.await?;
229229
let params = sniff_params(&args.params).await?;
230230
let mut source_params_json: Map<String, Value> = Map::new();
@@ -249,7 +249,7 @@ async fn add_source_cli(args: AddSourceArgs) -> anyhow::Result<()> {
249249
async fn delete_source_cli(args: DeleteSourceArgs) -> anyhow::Result<()> {
250250
let config = load_quickwit_config(args.config_uri, None).await?;
251251
let metastore = quickwit_metastore_uri_resolver()
252-
.resolve(&config.metastore_uri)
252+
.resolve(&config.metastore_uri())
253253
.await?;
254254
metastore
255255
.delete_source(&args.index_id, &args.source_id)
@@ -263,7 +263,7 @@ async fn delete_source_cli(args: DeleteSourceArgs) -> anyhow::Result<()> {
263263

264264
async fn describe_source_cli(args: DescribeSourceArgs) -> anyhow::Result<()> {
265265
let quickwit_config = load_quickwit_config(args.config_uri, None).await?;
266-
let index_metadata = resolve_index(&quickwit_config.metastore_uri, &args.index_id).await?;
266+
let index_metadata = resolve_index(&quickwit_config.metastore_uri(), &args.index_id).await?;
267267
let source_checkpoint = index_metadata
268268
.checkpoint
269269
.source_checkpoint(&args.source_id)
@@ -316,7 +316,7 @@ where
316316

317317
async fn list_sources_cli(args: ListSourcesArgs) -> anyhow::Result<()> {
318318
let quickwit_config = load_quickwit_config(args.config_uri, None).await?;
319-
let index_metadata = resolve_index(&quickwit_config.metastore_uri, &args.index_id).await?;
319+
let index_metadata = resolve_index(&quickwit_config.metastore_uri(), &args.index_id).await?;
320320
let table = make_list_sources_table(index_metadata.sources.into_values());
321321
display_tables(&[table]);
322322
Ok(())

quickwit-cli/src/split.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ async fn list_split_cli(args: ListSplitArgs) -> anyhow::Result<()> {
270270
let quickwit_config = load_quickwit_config(args.config_uri, args.data_dir).await?;
271271
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
272272
let metastore = metastore_uri_resolver
273-
.resolve(&quickwit_config.metastore_uri)
273+
.resolve(&quickwit_config.metastore_uri())
274274
.await?;
275275
let splits = metastore.list_all_splits(&args.index_id).await?;
276276

@@ -295,7 +295,7 @@ async fn describe_split_cli(args: DescribeSplitArgs) -> anyhow::Result<()> {
295295
let storage_uri_resolver = quickwit_storage_uri_resolver();
296296
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
297297
let metastore = metastore_uri_resolver
298-
.resolve(&quickwit_config.metastore_uri)
298+
.resolve(&quickwit_config.metastore_uri())
299299
.await?;
300300
let index_metadata = metastore.index_metadata(&args.index_id).await?;
301301
let index_storage = storage_uri_resolver.resolve(&index_metadata.index_uri)?;
@@ -325,7 +325,7 @@ async fn extract_split_cli(args: ExtractSplitArgs) -> anyhow::Result<()> {
325325
let storage_uri_resolver = quickwit_storage_uri_resolver();
326326
let metastore_uri_resolver = quickwit_metastore_uri_resolver();
327327
let metastore = metastore_uri_resolver
328-
.resolve(&quickwit_config.metastore_uri)
328+
.resolve(&quickwit_config.metastore_uri())
329329
.await?;
330330
let index_metadata = metastore.index_metadata(&args.index_id).await?;
331331
let index_storage = storage_uri_resolver.resolve(&index_metadata.index_uri)?;

quickwit-cli/tests/cli.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,7 @@ async fn test_cmd_create() -> Result<()> {
109109
.await
110110
.unwrap();
111111
assert_eq!(index_metadata.index_id, test_env.index_id);
112-
assert_eq!(
113-
index_metadata.index_uri,
114-
Uri::try_new(&format!("./qwdata/indexes/{}", test_env.index_id))
115-
.unwrap()
116-
.as_ref()
117-
);
112+
assert_eq!(index_metadata.index_uri, test_env.index_uri.as_ref());
118113

119114
// Attempt to create with ill-formed new command.
120115
make_command("index create")

quickwit-cli/tests/helpers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ pub enum TestStorageType {
158158
pub fn create_test_env(index_id: String, storage_type: TestStorageType) -> anyhow::Result<TestEnv> {
159159
let tempdir = tempdir()?;
160160
let data_dir_path = tempdir.path().join("data");
161-
let indexes_dir_path = tempdir.path().join("indexes");
161+
let indexes_dir_path = data_dir_path.join("indexes");
162162
let resources_dir_path = tempdir.path().join("resources");
163163

164164
for dir_path in [&data_dir_path, &indexes_dir_path, &resources_dir_path] {

quickwit-config/src/config.rs

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ fn default_data_dir_path() -> PathBuf {
4343
// For a given index `index-id`, it means that we have the metastore file
4444
// in `./qwdata/indexes/{index-id}/metastore.json` and splits in
4545
// dir `./qwdata/indexes/{index-id}/splits`.
46-
fn default_metastore_and_index_root_uri() -> String {
47-
Uri::try_new(&default_data_dir_path().join("indexes").to_string_lossy())
46+
fn default_metastore_and_index_root_uri(data_dir_path: &Path) -> String {
47+
Uri::try_new(&data_dir_path.join("indexes").to_string_lossy())
4848
.expect("Default data dir `./qwdata` value is invalid.")
4949
.as_ref()
5050
.to_string()
@@ -150,7 +150,7 @@ pub struct StorageConfig {
150150
pub s3_config: S3Config,
151151
}
152152

153-
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
153+
#[derive(Clone, Serialize, Deserialize, PartialEq)]
154154
#[serde(deny_unknown_fields)]
155155
pub struct QuickwitConfig {
156156
pub version: usize,
@@ -162,10 +162,8 @@ pub struct QuickwitConfig {
162162
pub rest_listen_port: u16,
163163
#[serde(default)]
164164
pub peer_seeds: Vec<String>,
165-
#[serde(default = "default_metastore_and_index_root_uri")]
166-
pub metastore_uri: String,
167-
#[serde(default = "default_metastore_and_index_root_uri")]
168-
pub default_index_root_uri: String,
165+
metastore_uri: Option<String>,
166+
default_index_root_uri: Option<String>,
169167
#[serde(default = "default_data_dir_path")]
170168
#[serde(rename = "data_dir")]
171169
pub data_dir_path: PathBuf,
@@ -292,6 +290,21 @@ impl QuickwitConfig {
292290
}
293291
}
294292

293+
impl QuickwitConfig {
294+
pub fn metastore_uri(&self) -> String {
295+
self.metastore_uri
296+
.as_ref()
297+
.unwrap_or(&default_metastore_and_index_root_uri(&self.data_dir_path))
298+
.to_string()
299+
}
300+
pub fn default_index_root_uri(&self) -> String {
301+
self.default_index_root_uri
302+
.as_ref()
303+
.unwrap_or(&default_metastore_and_index_root_uri(&self.data_dir_path))
304+
.to_string()
305+
}
306+
}
307+
295308
impl Default for QuickwitConfig {
296309
fn default() -> Self {
297310
Self {
@@ -300,8 +313,8 @@ impl Default for QuickwitConfig {
300313
rest_listen_port: default_rest_listen_port(),
301314
peer_seeds: Vec::new(),
302315
node_id: default_node_id(),
303-
metastore_uri: default_metastore_and_index_root_uri(),
304-
default_index_root_uri: default_metastore_and_index_root_uri(),
316+
metastore_uri: None,
317+
default_index_root_uri: None,
305318
data_dir_path: PathBuf::from(DEFAULT_DATA_DIR_PATH),
306319
indexer_config: IndexerConfig::default(),
307320
searcher_config: SearcherConfig::default(),
@@ -310,6 +323,25 @@ impl Default for QuickwitConfig {
310323
}
311324
}
312325

326+
impl std::fmt::Debug for QuickwitConfig {
327+
fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
328+
formatter
329+
.debug_struct("QuickwitConfig")
330+
.field("version", &self.version)
331+
.field("node_id", &self.node_id)
332+
.field("listen_address", &self.listen_address)
333+
.field("rest_listen_port", &self.rest_listen_port)
334+
.field("peer_seeds", &self.peer_seeds)
335+
.field("data_dir_path", &self.data_dir_path)
336+
.field("metastore_uri", &self.metastore_uri())
337+
.field("default_index_root_uri", &self.default_index_root_uri())
338+
.field("indexer_config", &self.indexer_config)
339+
.field("searcher_config", &self.searcher_config)
340+
.field("storage_config", &self.storage_config)
341+
.finish()
342+
}
343+
}
344+
313345
#[cfg(test)]
314346
mod tests {
315347
use std::env;
@@ -349,7 +381,7 @@ mod tests {
349381
]
350382
);
351383
assert_eq!(
352-
config.metastore_uri,
384+
config.metastore_uri(),
353385
"postgres://username:password@host:port/db"
354386
);
355387

@@ -410,7 +442,7 @@ mod tests {
410442
assert_eq!(config.version, 0);
411443
assert_eq!(config.node_id, "1");
412444
assert_eq!(
413-
config.metastore_uri,
445+
config.metastore_uri(),
414446
"postgres://username:password@host:port/db"
415447
);
416448
assert!(config.storage_config.is_none());
@@ -424,7 +456,7 @@ mod tests {
424456
let config = serde_yaml::from_str::<QuickwitConfig>(config_yaml).unwrap();
425457
assert_eq!(config.version, 0);
426458
assert_eq!(
427-
config.metastore_uri,
459+
config.metastore_uri(),
428460
"postgres://username:password@host:port/db"
429461
);
430462
assert_eq!(
@@ -446,7 +478,7 @@ mod tests {
446478
assert_eq!(config.version, 0);
447479
assert!(config.node_id.starts_with("node-"));
448480
assert_eq!(
449-
config.metastore_uri,
481+
config.metastore_uri(),
450482
format!(
451483
"file://{}/qwdata/indexes",
452484
env::current_dir().unwrap().display()

0 commit comments

Comments
 (0)