Skip to content

Commit d05dd38

Browse files
committed
Handle ingest settings during index config update
1 parent 084e2be commit d05dd38

File tree

29 files changed

+261
-194
lines changed

29 files changed

+261
-194
lines changed

quickwit/quickwit-config/resources/tests/index_config/hdfs-logs.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,6 @@
5353
"period": "90 days",
5454
"schedule": "daily"
5555
},
56-
"ingest_settings": {
57-
"min_shards": 12
58-
},
5956
"indexing_settings": {
6057
"commit_timeout_secs": 61,
6158
"split_num_docs_target": 10000001,
@@ -69,6 +66,9 @@
6966
"heap_size": "3G"
7067
}
7168
},
69+
"ingest_settings": {
70+
"min_shards": 12
71+
},
7272
"search_settings": {
7373
"default_search_fields": ["severity_text", "body"]
7474
}

quickwit/quickwit-config/resources/tests/index_config/hdfs-logs.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ timestamp_field = "timestamp"
2121
period = "90 days"
2222
schedule = "daily"
2323

24-
[ingest_settings]
25-
min_shards = 12
26-
2724
[indexing_settings]
2825
commit_timeout_secs = 61
2926
split_num_docs_target = 10_000_001
3027

28+
[ingest_settings]
29+
min_shards = 12
30+
3131
[indexing_settings.merge_policy]
3232
type = "stable_log"
3333
merge_factor = 9

quickwit/quickwit-config/resources/tests/index_config/hdfs-logs.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ retention:
3535
period: 90 days
3636
schedule: daily
3737

38-
ingest_settings:
39-
min_shards: 12
40-
4138
indexing_settings:
4239
commit_timeout_secs: 61
4340
split_num_docs_target: 10000001
@@ -49,5 +46,8 @@ indexing_settings:
4946
resources:
5047
heap_size: 3G
5148

49+
ingest_settings:
50+
min_shards: 12
51+
5252
search_settings:
5353
default_search_fields: [severity_text, body]

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

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,28 +36,6 @@ use tracing::warn;
3636
use crate::index_config::serialize::VersionedIndexConfig;
3737
use crate::merge_policy_config::MergePolicyConfig;
3838

39-
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, utoipa::ToSchema)]
40-
#[serde(deny_unknown_fields)]
41-
pub struct IngestSettings {
42-
#[schema(default = 1)]
43-
#[serde(default = "IngestSettings::default_min_shards")]
44-
pub min_shards: NonZeroUsize,
45-
}
46-
47-
impl IngestSettings {
48-
pub fn default_min_shards() -> NonZeroUsize {
49-
NonZeroUsize::new(1).unwrap()
50-
}
51-
}
52-
53-
impl Default for IngestSettings {
54-
fn default() -> Self {
55-
Self {
56-
min_shards: Self::default_min_shards(),
57-
}
58-
}
59-
}
60-
6139
#[derive(Clone, Debug, Serialize, Deserialize, utoipa::ToSchema)]
6240
#[serde(deny_unknown_fields)]
6341
pub struct IndexingResources {
@@ -184,6 +162,30 @@ impl Default for IndexingSettings {
184162
}
185163
}
186164

165+
/// Settings for ingestion.
166+
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, utoipa::ToSchema)]
167+
#[serde(deny_unknown_fields)]
168+
pub struct IngestSettings {
169+
/// Configures the minimum number of shards to use for ingestion.
170+
#[schema(default = 1)]
171+
#[serde(default = "IngestSettings::default_min_shards")]
172+
pub min_shards: NonZeroUsize,
173+
}
174+
175+
impl IngestSettings {
176+
pub fn default_min_shards() -> NonZeroUsize {
177+
NonZeroUsize::new(1).unwrap()
178+
}
179+
}
180+
181+
impl Default for IngestSettings {
182+
fn default() -> Self {
183+
Self {
184+
min_shards: Self::default_min_shards(),
185+
}
186+
}
187+
}
188+
187189
#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, utoipa::ToSchema)]
188190
#[serde(deny_unknown_fields)]
189191
pub struct SearchSettings {
@@ -273,8 +275,8 @@ pub struct IndexConfig {
273275
pub index_id: IndexId,
274276
pub index_uri: Uri,
275277
pub doc_mapping: DocMapping,
276-
pub ingest_settings: IngestSettings,
277278
pub indexing_settings: IndexingSettings,
279+
pub ingest_settings: IngestSettings,
278280
pub search_settings: SearchSettings,
279281
pub retention_policy_opt: Option<RetentionPolicy>,
280282
}
@@ -382,8 +384,8 @@ impl IndexConfig {
382384
index_id: index_id.to_string(),
383385
index_uri,
384386
doc_mapping,
385-
ingest_settings: IngestSettings::default(),
386387
indexing_settings,
388+
ingest_settings: IngestSettings::default(),
387389
search_settings,
388390
retention_policy_opt: None,
389391
}
@@ -481,17 +483,20 @@ impl crate::TestableForRegression for IndexConfig {
481483
resources: indexing_resources,
482484
..Default::default()
483485
};
486+
let ingest_settings = IngestSettings {
487+
min_shards: NonZeroUsize::new(12).unwrap(),
488+
};
484489
let search_settings = SearchSettings {
485490
default_search_fields: vec!["message".to_string()],
486491
};
487492
IndexConfig {
488493
index_id: "my-index".to_string(),
489494
index_uri: Uri::for_test("s3://quickwit-indexes/my-index"),
490495
doc_mapping,
491-
ingest_settings: IngestSettings::default(),
492496
indexing_settings,
493-
retention_policy_opt: retention_policy,
497+
ingest_settings,
494498
search_settings,
499+
retention_policy_opt: retention_policy,
495500
}
496501
}
497502

@@ -500,7 +505,9 @@ impl crate::TestableForRegression for IndexConfig {
500505
assert_eq!(self.index_uri, other.index_uri);
501506
assert_eq!(self.doc_mapping, other.doc_mapping);
502507
assert_eq!(self.indexing_settings, other.indexing_settings);
508+
assert_eq!(self.ingest_settings, other.ingest_settings);
503509
assert_eq!(self.search_settings, other.search_settings);
510+
assert_eq!(self.retention_policy_opt, other.retention_policy_opt);
504511
}
505512
}
506513

@@ -514,7 +521,8 @@ pub fn build_doc_mapper(
514521
default_search_fields: search_settings.default_search_fields.clone(),
515522
legacy_type_tag: None,
516523
};
517-
Ok(Arc::new(builder.try_build()?))
524+
let doc_mapper = builder.try_build()?;
525+
Ok(Arc::new(doc_mapper))
518526
}
519527

520528
/// Validates the objects that make up an index configuration. This is a "free" function as opposed
@@ -607,7 +615,6 @@ mod tests {
607615
index_config.doc_mapping.timestamp_field.unwrap(),
608616
"timestamp"
609617
);
610-
assert_eq!(index_config.ingest_settings.min_shards.get(), 12);
611618
assert_eq!(index_config.indexing_settings.commit_timeout_secs, 61);
612619
assert_eq!(
613620
index_config.indexing_settings.merge_policy,
@@ -625,6 +632,7 @@ mod tests {
625632
..Default::default()
626633
}
627634
);
635+
assert_eq!(index_config.ingest_settings.min_shards.get(), 12);
628636
assert_eq!(
629637
index_config.search_settings,
630638
SearchSettings {

quickwit/quickwit-config/src/index_config/serialize.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ impl IndexConfigForSerialization {
184184
index_id: self.index_id,
185185
index_uri,
186186
doc_mapping: self.doc_mapping,
187-
ingest_settings: self.ingest_settings,
188187
indexing_settings: self.indexing_settings,
188+
ingest_settings: self.ingest_settings,
189189
search_settings: self.search_settings,
190190
retention_policy_opt: self.retention_policy_opt,
191191
};
@@ -230,10 +230,10 @@ pub struct IndexConfigV0_8 {
230230
pub index_uri: Option<Uri>,
231231
pub doc_mapping: DocMapping,
232232
#[serde(default)]
233-
pub ingest_settings: IngestSettings,
234-
#[serde(default)]
235233
pub indexing_settings: IndexingSettings,
236234
#[serde(default)]
235+
pub ingest_settings: IngestSettings,
236+
#[serde(default)]
237237
pub search_settings: SearchSettings,
238238
#[serde(rename = "retention")]
239239
#[serde(default)]
@@ -246,8 +246,8 @@ impl From<IndexConfig> for IndexConfigV0_8 {
246246
index_id: index_config.index_id,
247247
index_uri: Some(index_config.index_uri),
248248
doc_mapping: index_config.doc_mapping,
249-
ingest_settings: index_config.ingest_settings,
250249
indexing_settings: index_config.indexing_settings,
250+
ingest_settings: index_config.ingest_settings,
251251
search_settings: index_config.search_settings,
252252
retention_policy_opt: index_config.retention_policy_opt,
253253
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ pub struct IndexTemplate {
4343
pub description: Option<String>,
4444
pub doc_mapping: DocMapping,
4545
#[serde(default)]
46-
pub ingest_settings: IngestSettings,
47-
#[serde(default)]
4846
pub indexing_settings: IndexingSettings,
4947
#[serde(default)]
48+
pub ingest_settings: IngestSettings,
49+
#[serde(default)]
5050
pub search_settings: SearchSettings,
5151
#[serde(rename = "retention")]
5252
#[serde(default)]
@@ -73,8 +73,8 @@ impl IndexTemplate {
7373
index_id,
7474
index_uri,
7575
doc_mapping,
76-
ingest_settings: self.ingest_settings.clone(),
7776
indexing_settings: self.indexing_settings.clone(),
77+
ingest_settings: self.ingest_settings.clone(),
7878
search_settings: self.search_settings.clone(),
7979
retention_policy_opt: self.retention_policy_opt.clone(),
8080
};
@@ -130,8 +130,8 @@ impl IndexTemplate {
130130
priority,
131131
description: Some("Test description.".to_string()),
132132
doc_mapping,
133-
ingest_settings: IngestSettings::default(),
134133
indexing_settings: IndexingSettings::default(),
134+
ingest_settings: IngestSettings::default(),
135135
search_settings: SearchSettings::default(),
136136
retention_policy_opt: None,
137137
}
@@ -171,8 +171,8 @@ impl crate::TestableForRegression for IndexTemplate {
171171
priority: 100,
172172
description: Some("Test description.".to_string()),
173173
doc_mapping,
174-
ingest_settings: IngestSettings::default(),
175174
indexing_settings: IndexingSettings::default(),
175+
ingest_settings: IngestSettings::default(),
176176
search_settings: SearchSettings::default(),
177177
retention_policy_opt: Some(RetentionPolicy {
178178
retention_period: "42 days".to_string(),

quickwit/quickwit-config/src/index_template/serialize.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ pub struct IndexTemplateV0_8 {
4848

4949
pub doc_mapping: DocMapping,
5050
#[serde(default)]
51-
pub ingest_settings: IngestSettings,
52-
#[serde(default)]
5351
pub indexing_settings: IndexingSettings,
5452
#[serde(default)]
53+
pub ingest_settings: IngestSettings,
54+
#[serde(default)]
5555
pub search_settings: SearchSettings,
5656
#[serde(default)]
5757
pub retention: Option<RetentionPolicy>,
@@ -80,8 +80,8 @@ impl From<IndexTemplateV0_8> for IndexTemplate {
8080
priority: index_template_v0_8.priority,
8181
description: index_template_v0_8.description,
8282
doc_mapping: index_template_v0_8.doc_mapping,
83-
ingest_settings: index_template_v0_8.ingest_settings,
8483
indexing_settings: index_template_v0_8.indexing_settings,
84+
ingest_settings: index_template_v0_8.ingest_settings,
8585
search_settings: index_template_v0_8.search_settings,
8686
retention_policy_opt: index_template_v0_8.retention,
8787
}
@@ -97,8 +97,8 @@ impl From<IndexTemplate> for IndexTemplateV0_8 {
9797
priority: index_template.priority,
9898
description: index_template.description,
9999
doc_mapping: index_template.doc_mapping,
100-
ingest_settings: index_template.ingest_settings,
101100
indexing_settings: index_template.indexing_settings,
101+
ingest_settings: index_template.ingest_settings,
102102
search_settings: index_template.search_settings,
103103
retention: index_template.retention_policy_opt,
104104
}

quickwit/quickwit-metastore/src/metastore/file_backed/file_backed_index/mod.rs

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use std::ops::Bound;
2626
use itertools::Itertools;
2727
use quickwit_common::pretty::PrettySample;
2828
use quickwit_config::{
29-
DocMapping, IndexingSettings, RetentionPolicy, SearchSettings, SourceConfig,
29+
DocMapping, IndexingSettings, IngestSettings, RetentionPolicy, SearchSettings, SourceConfig,
3030
};
3131
use quickwit_proto::metastore::{
3232
AcquireShardsRequest, AcquireShardsResponse, DeleteQuery, DeleteShardsRequest,
@@ -214,24 +214,21 @@ impl FileBackedIndex {
214214
&self.metadata
215215
}
216216

217-
/// Replaces the retention policy in the index config, returning whether a mutation occurred.
218-
pub fn set_retention_policy(&mut self, retention_policy_opt: Option<RetentionPolicy>) -> bool {
219-
self.metadata.set_retention_policy(retention_policy_opt)
220-
}
221-
222-
/// Replaces the search settings in the index config, returning whether a mutation occurred.
223-
pub fn set_search_settings(&mut self, search_settings: SearchSettings) -> bool {
224-
self.metadata.set_search_settings(search_settings)
225-
}
226-
227-
/// Replaces the indexing settings in the index config, returning whether a mutation occurred.
228-
pub fn set_indexing_settings(&mut self, search_settings: IndexingSettings) -> bool {
229-
self.metadata.set_indexing_settings(search_settings)
230-
}
231-
232-
/// Replaces the doc mapping in the index config, returning whether a mutation occurred.
233-
pub fn set_doc_mapping(&mut self, doc_mapping: DocMapping) -> bool {
234-
self.metadata.set_doc_mapping(doc_mapping)
217+
pub fn update_index_config(
218+
&mut self,
219+
doc_mapping: DocMapping,
220+
indexing_settings: IndexingSettings,
221+
ingest_settings: IngestSettings,
222+
search_settings: SearchSettings,
223+
retention_policy_opt: Option<RetentionPolicy>,
224+
) -> bool {
225+
self.metadata.update_index_config(
226+
doc_mapping,
227+
indexing_settings,
228+
ingest_settings,
229+
search_settings,
230+
retention_policy_opt,
231+
)
235232
}
236233

237234
/// Stages a single split.

quickwit/quickwit-metastore/src/metastore/file_backed/mod.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -558,19 +558,22 @@ impl MetastoreService for FileBackedMetastore {
558558
&self,
559559
request: UpdateIndexRequest,
560560
) -> MetastoreResult<IndexMetadataResponse> {
561-
let retention_policy_opt = request.deserialize_retention_policy()?;
562-
let search_settings = request.deserialize_search_settings()?;
563-
let indexing_settings = request.deserialize_indexing_settings()?;
564-
let doc_mapping = request.deserialize_doc_mapping()?;
565561
let index_uid = request.index_uid();
562+
let doc_mapping = request.deserialize_doc_mapping()?;
563+
let indexing_settings = request.deserialize_indexing_settings()?;
564+
let ingest_settings = request.deserialize_ingest_settings()?;
565+
let search_settings = request.deserialize_search_settings()?;
566+
let retention_policy_opt = request.deserialize_retention_policy()?;
566567

567568
let index_metadata = self
568569
.mutate(index_uid, |index| {
569-
let mut mutation_occurred = index.set_retention_policy(retention_policy_opt);
570-
mutation_occurred |= index.set_search_settings(search_settings);
571-
mutation_occurred |= index.set_indexing_settings(indexing_settings);
572-
mutation_occurred |= index.set_doc_mapping(doc_mapping);
573-
570+
let mutation_occurred = index.update_index_config(
571+
doc_mapping,
572+
indexing_settings,
573+
ingest_settings,
574+
search_settings,
575+
retention_policy_opt,
576+
);
574577
let index_metadata = index.metadata().clone();
575578

576579
if mutation_occurred {

0 commit comments

Comments
 (0)