Make the feature experimental

This commit is contained in:
ManyTheFish 2023-12-06 14:47:34 +01:00
parent 8cc3c54117
commit 1f4fc9c229
5 changed files with 38 additions and 7 deletions

View File

@ -1343,6 +1343,9 @@ impl IndexScheduler {
for (task, (_, settings)) in tasks.iter_mut().zip(settings) { for (task, (_, settings)) in tasks.iter_mut().zip(settings) {
let checked_settings = settings.clone().check(); let checked_settings = settings.clone().check();
if checked_settings.proximity_precision.set().is_some() {
self.features.features().check_proximity_precision()?;
}
task.details = Some(Details::SettingsUpdate { settings: Box::new(settings) }); task.details = Some(Details::SettingsUpdate { settings: Box::new(settings) });
apply_settings_to_builder(&checked_settings, &mut builder); apply_settings_to_builder(&checked_settings, &mut builder);

View File

@ -81,6 +81,19 @@ impl RoFeatures {
.into()) .into())
} }
} }
pub fn check_proximity_precision(&self) -> Result<()> {
if self.runtime.proximity_precision {
Ok(())
} else {
Err(FeatureNotEnabledError {
disabled_action: "Using `proximityPrecision` index setting",
feature: "proximity precision",
issue_link: "https://github.com/orgs/meilisearch/discussions/710",
}
.into())
}
}
} }
impl FeatureData { impl FeatureData {

View File

@ -7,6 +7,7 @@ pub struct RuntimeTogglableFeatures {
pub vector_store: bool, pub vector_store: bool,
pub metrics: bool, pub metrics: bool,
pub export_puffin_reports: bool, pub export_puffin_reports: bool,
pub proximity_precision: bool,
} }
#[derive(Default, Debug, Clone, Copy)] #[derive(Default, Debug, Clone, Copy)]

View File

@ -48,6 +48,8 @@ pub struct RuntimeTogglableFeatures {
pub metrics: Option<bool>, pub metrics: Option<bool>,
#[deserr(default)] #[deserr(default)]
pub export_puffin_reports: Option<bool>, pub export_puffin_reports: Option<bool>,
#[deserr(default)]
pub proximity_precision: Option<bool>,
} }
async fn patch_features( async fn patch_features(
@ -70,6 +72,10 @@ async fn patch_features(
.0 .0
.export_puffin_reports .export_puffin_reports
.unwrap_or(old_features.export_puffin_reports), .unwrap_or(old_features.export_puffin_reports),
proximity_precision: new_features
.0
.proximity_precision
.unwrap_or(old_features.proximity_precision),
}; };
// explicitly destructure for analytics rather than using the `Serialize` implementation, because // explicitly destructure for analytics rather than using the `Serialize` implementation, because
@ -80,6 +86,7 @@ async fn patch_features(
vector_store, vector_store,
metrics, metrics,
export_puffin_reports, export_puffin_reports,
proximity_precision,
} = new_features; } = new_features;
analytics.publish( analytics.publish(
@ -89,6 +96,7 @@ async fn patch_features(
"vector_store": vector_store, "vector_store": vector_store,
"metrics": metrics, "metrics": metrics,
"export_puffin_reports": export_puffin_reports, "export_puffin_reports": export_puffin_reports,
"proximity_precision": proximity_precision,
}), }),
Some(&req), Some(&req),
); );

View File

@ -21,7 +21,8 @@ async fn experimental_features() {
"scoreDetails": false, "scoreDetails": false,
"vectorStore": false, "vectorStore": false,
"metrics": false, "metrics": false,
"exportPuffinReports": false "exportPuffinReports": false,
"proximityPrecision": false
} }
"###); "###);
@ -33,7 +34,8 @@ async fn experimental_features() {
"scoreDetails": false, "scoreDetails": false,
"vectorStore": true, "vectorStore": true,
"metrics": false, "metrics": false,
"exportPuffinReports": false "exportPuffinReports": false,
"proximityPrecision": false
} }
"###); "###);
@ -45,7 +47,8 @@ async fn experimental_features() {
"scoreDetails": false, "scoreDetails": false,
"vectorStore": true, "vectorStore": true,
"metrics": false, "metrics": false,
"exportPuffinReports": false "exportPuffinReports": false,
"proximityPrecision": false
} }
"###); "###);
@ -58,7 +61,8 @@ async fn experimental_features() {
"scoreDetails": false, "scoreDetails": false,
"vectorStore": true, "vectorStore": true,
"metrics": false, "metrics": false,
"exportPuffinReports": false "exportPuffinReports": false,
"proximityPrecision": false
} }
"###); "###);
@ -71,7 +75,8 @@ async fn experimental_features() {
"scoreDetails": false, "scoreDetails": false,
"vectorStore": true, "vectorStore": true,
"metrics": false, "metrics": false,
"exportPuffinReports": false "exportPuffinReports": false,
"proximityPrecision": false
} }
"###); "###);
} }
@ -91,7 +96,8 @@ async fn experimental_feature_metrics() {
"scoreDetails": false, "scoreDetails": false,
"vectorStore": false, "vectorStore": false,
"metrics": true, "metrics": true,
"exportPuffinReports": false "exportPuffinReports": false,
"proximityPrecision": false
} }
"###); "###);
@ -146,7 +152,7 @@ async fn errors() {
meili_snap::snapshot!(code, @"400 Bad Request"); meili_snap::snapshot!(code, @"400 Bad Request");
meili_snap::snapshot!(meili_snap::json_string!(response), @r###" meili_snap::snapshot!(meili_snap::json_string!(response), @r###"
{ {
"message": "Unknown field `NotAFeature`: expected one of `scoreDetails`, `vectorStore`, `metrics`, `exportPuffinReports`", "message": "Unknown field `NotAFeature`: expected one of `scoreDetails`, `vectorStore`, `metrics`, `exportPuffinReports`, `proximityPrecision`",
"code": "bad_request", "code": "bad_request",
"type": "invalid_request", "type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#bad_request" "link": "https://docs.meilisearch.com/errors#bad_request"