Skip to content

Commit

Permalink
Make subscriptions unstable feature (#1025)
Browse files Browse the repository at this point in the history
<!-- The PR description should answer 2 important questions: -->

### What

Put subscriptions API behind unstable feature.

V3_GIT_ORIGIN_REV_ID: 4eb454009c2e9658d899efbb81488faac3674e48
  • Loading branch information
rakeshkky authored and hasura-bot committed Aug 29, 2024
1 parent ffa43e3 commit 846ae16
Show file tree
Hide file tree
Showing 9 changed files with 26 additions and 4 deletions.
5 changes: 4 additions & 1 deletion v3/crates/engine/src/internal_flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
pub enum UnstableFeature {
EnableOrderByExpressions,
EnableNdcV02Support,
EnableSubscriptions,
}

pub fn resolve_unstable_features(
Expand All @@ -34,8 +35,10 @@ pub fn resolve_unstable_features(
UnstableFeature::EnableNdcV02Support => {
features.enable_ndc_v02_support = true;
}
UnstableFeature::EnableSubscriptions => {
features.enable_subscriptions = true;
}
}
}

features
}
2 changes: 2 additions & 0 deletions v3/crates/engine/tests/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ pub fn test_execute_explain(
unstable_features: metadata_resolve::configuration::UnstableFeatures {
enable_order_by_expressions: false,
enable_ndc_v02_support: true,
enable_subscriptions: false,
},
..Default::default()
};
Expand Down Expand Up @@ -547,6 +548,7 @@ pub(crate) fn test_metadata_resolve_configuration() -> metadata_resolve::configu
unstable_features: metadata_resolve::configuration::UnstableFeatures {
enable_order_by_expressions: false,
enable_ndc_v02_support: true,
enable_subscriptions: false,
},
}
}
Expand Down
1 change: 1 addition & 0 deletions v3/crates/metadata-resolve/src/stages/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ pub fn resolve(
&order_by_expressions,
&graphql_types,
&graphql_config,
configuration,
)?;

let commands_with_permissions = command_permissions::resolve(
Expand Down
13 changes: 10 additions & 3 deletions v3/crates/metadata-resolve/src/stages/models_graphql/graphql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use super::types::{
SelectAggregateGraphQlDefinition, SelectManyGraphQlDefinition, SelectUniqueGraphQlDefinition,
SubscriptionGraphQlDefinition, UniqueIdentifierField,
};
use crate::configuration::Configuration;
use crate::helpers::types::{mk_name, store_new_graphql_type};
use crate::stages::order_by_expressions::OrderByExpressions;
use crate::stages::{data_connector_scalar_types, graphql_config, models, object_types};
Expand All @@ -32,6 +33,7 @@ pub(crate) fn resolve_model_graphql_api(
aggregate_expression_name: &Option<Qualified<AggregateExpressionName>>,
order_by_expressions: &OrderByExpressions,
graphql_config: &graphql_config::GraphqlConfig,
configuration: &Configuration,
) -> Result<ModelGraphQlApi, Error> {
let model_name = &model.name;
let mut graphql_api = ModelGraphQlApi::default();
Expand Down Expand Up @@ -88,7 +90,7 @@ pub(crate) fn resolve_model_graphql_api(
let subscription = select_unique
.subscription
.as_ref()
.map(resolve_subscription_graphql_api)
.map(|s| resolve_subscription_graphql_api(s, configuration))
.transpose()?;
graphql_api
.select_uniques
Expand Down Expand Up @@ -165,7 +167,7 @@ pub(crate) fn resolve_model_graphql_api(
let subscription = gql_definition
.subscription
.as_ref()
.map(resolve_subscription_graphql_api)
.map(|s| resolve_subscription_graphql_api(s, configuration))
.transpose()?;
mk_name(gql_definition.query_root_field.as_str()).map(|f: ast::Name| {
let select_many_description = if gql_definition.description.is_some() {
Expand Down Expand Up @@ -236,7 +238,7 @@ pub(crate) fn resolve_model_graphql_api(
let subscription = graphql_aggregate
.subscription
.as_ref()
.map(resolve_subscription_graphql_api)
.map(|s| resolve_subscription_graphql_api(s, configuration))
.transpose()?;
Ok(SelectAggregateGraphQlDefinition {
query_root_field: mk_name(graphql_aggregate.query_root_field.as_str())?,
Expand Down Expand Up @@ -329,7 +331,12 @@ fn is_model_used_in_any_aggregate_relationship(

fn resolve_subscription_graphql_api(
subscription: &open_dds::models::SubscriptionGraphQlDefinition,
configuration: &Configuration,
) -> Result<SubscriptionGraphQlDefinition, Error> {
// Subscriptions are currently unstable.
if !configuration.unstable_features.enable_subscriptions {
return Err(Error::UnstableFeatureSubscriptions);
}
let open_dds::models::SubscriptionGraphQlDefinition {
root_field,
description,
Expand Down
3 changes: 3 additions & 0 deletions v3/crates/metadata-resolve/src/stages/models_graphql/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use indexmap::IndexMap;
use lang_graphql::ast::common as ast;
use open_dds::{data_connector::DataConnectorName, models::ModelName, types::CustomTypeName};

use crate::configuration::Configuration;
use crate::stages::{
boolean_expressions, data_connector_scalar_types, graphql_config, models,
object_boolean_expressions, relationships,
Expand Down Expand Up @@ -40,6 +41,7 @@ pub fn resolve(
order_by_expressions: &order_by_expressions::OrderByExpressions,
existing_graphql_types: &BTreeSet<ast::TypeName>,
graphql_config: &graphql_config::GraphqlConfig,
configuration: &Configuration,
) -> Result<types::ModelsWithGraphql, Error> {
let mut models_with_graphql = types::ModelsWithGraphql::new();

Expand Down Expand Up @@ -83,6 +85,7 @@ pub fn resolve(
&model.aggregate_expression,
order_by_expressions,
graphql_config,
configuration,
)?,
None => types::ModelGraphQlApi::default(),
};
Expand Down
1 change: 1 addition & 0 deletions v3/crates/metadata-resolve/src/types/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ pub struct Configuration {
pub struct UnstableFeatures {
pub enable_order_by_expressions: bool,
pub enable_ndc_v02_support: bool,
pub enable_subscriptions: bool,
}
2 changes: 2 additions & 0 deletions v3/crates/metadata-resolve/src/types/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ pub enum Error {
CompatibilityError {
warnings_as_errors: SeparatedBy<crate::Warning>,
},
#[error("Subscriptions are currently unstable. Please add 'subscriptions' to unstable features to enable them.")]
UnstableFeatureSubscriptions,
}

pub trait ShouldBeAnError {
Expand Down
1 change: 1 addition & 0 deletions v3/crates/metadata-resolve/tests/metadata_golden_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ fn read_test_configuration(
let unstable_features = configuration::UnstableFeatures {
enable_order_by_expressions: false,
enable_ndc_v02_support: false,
enable_subscriptions: false,
};

let configuration_path = directory.join("configuration.json");
Expand Down
2 changes: 2 additions & 0 deletions v3/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ watch: start-docker-test-deps start-docker-run-deps
--otlp-endpoint http://localhost:4317 \
--authn-config-path static/auth/auth_config.json \
--metadata-path static/sample-schema.json \
--unstable-feature enable-subscriptions \
--expose-internal-errors'

# check the code is fine
Expand Down Expand Up @@ -148,4 +149,5 @@ run: start-docker-test-deps start-docker-run-deps
--otlp-endpoint http://localhost:4317 \
--authn-config-path static/auth/auth_config.json \
--metadata-path static/sample-schema.json \
--unstable-feature enable-subscriptions \
--expose-internal-errors

0 comments on commit 846ae16

Please sign in to comment.