Skip to content

Commit e4a57df

Browse files
committed
Revert
1 parent 0438acf commit e4a57df

File tree

17 files changed

+128
-216
lines changed

17 files changed

+128
-216
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/router/src/pipeline/progressive_override.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
use std::collections::{BTreeMap, HashMap, HashSet};
22

3-
use hive_router_config::{
4-
override_labels::{LabelOverrideValue, OverrideLabelsConfig},
5-
primitives::expression::Expression,
3+
use hive_router_config::override_labels::{LabelOverrideValue, OverrideLabelsConfig};
4+
use hive_router_plan_executor::{
5+
execution::client_request_details::ClientRequestDetails, utils::expression::compile_expression,
66
};
7-
use hive_router_plan_executor::execution::client_request_details::ClientRequestDetails;
87
use hive_router_query_planner::{
98
graph::{PlannerOverrideContext, PERCENTAGE_SCALE_FACTOR},
109
state::supergraph_state::SupergraphState,
1110
};
1211
use rand::Rng;
1312
use vrl::{
13+
compiler::Program as VrlProgram,
1414
compiler::TargetValue as VrlTargetValue,
1515
core::Value as VrlValue,
1616
prelude::{
@@ -119,7 +119,7 @@ impl StableOverrideContext {
119119
/// It's intended to be used as a shared state in the router.
120120
pub struct OverrideLabelsEvaluator {
121121
static_enabled_labels: HashSet<String>,
122-
expressions: HashMap<String, Expression>,
122+
expressions: HashMap<String, VrlProgram>,
123123
}
124124

125125
impl OverrideLabelsEvaluator {
@@ -134,8 +134,14 @@ impl OverrideLabelsEvaluator {
134134
LabelOverrideValue::Boolean(true) => {
135135
static_enabled_labels.insert(label.clone());
136136
}
137-
LabelOverrideValue::Expression(expression) => {
138-
expressions.insert(label.clone(), expression.clone());
137+
LabelOverrideValue::Expression { expression } => {
138+
let program = compile_expression(expression, None).map_err(|err| {
139+
OverrideLabelsCompileError {
140+
label: label.clone(),
141+
error: err.to_string(),
142+
}
143+
})?;
144+
expressions.insert(label.clone(), program);
139145
}
140146
_ => {} // Skip false booleans
141147
}
@@ -168,7 +174,7 @@ impl OverrideLabelsEvaluator {
168174
let mut ctx = VrlContext::new(&mut target, &mut state, &timezone);
169175

170176
for (label, expression) in &self.expressions {
171-
match expression.execute_with_context(&mut ctx) {
177+
match expression.resolve(&mut ctx) {
172178
Ok(evaluated_value) => match evaluated_value {
173179
VrlValue::Boolean(true) => {
174180
active_flags.insert(label.clone());

docs/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ For more information on the available functions and syntax, see the
641641

642642
|Name|Type|Description|Required|
643643
|----|----|-----------|--------|
644-
|**expression**|`string`|The VRL expression string.<br/>|yes|
644+
|**expression**|`string`||yes|
645645

646646

647647
<a name="headersallresponse"></a>
@@ -863,7 +863,7 @@ For more information on the available functions and syntax, see the
863863

864864
|Name|Type|Description|Required|
865865
|----|----|-----------|--------|
866-
|**expression**|`string`|The VRL expression string.<br/>|yes|
866+
|**expression**|`string`||yes|
867867

868868

869869
<a name="headerssubgraphs"></a>
@@ -1116,7 +1116,7 @@ For more information on the available functions and syntax, see the
11161116

11171117
|Name|Type|Description|Required|
11181118
|----|----|-----------|--------|
1119-
|**expression**|`string`|The VRL expression string.<br/>|yes|
1119+
|**expression**|`string`||yes|
11201120

11211121

11221122
<a name="headerssubgraphsadditionalpropertiesresponse"></a>
@@ -1338,7 +1338,7 @@ For more information on the available functions and syntax, see the
13381338

13391339
|Name|Type|Description|Required|
13401340
|----|----|-----------|--------|
1341-
|**expression**|`string`|The VRL expression string.<br/>|yes|
1341+
|**expression**|`string`||yes|
13421342

13431343

13441344
<a name="http"></a>

lib/executor/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ itoa = "1.0.15"
4949
ryu = "1.0.20"
5050
indexmap = "2.10.0"
5151
bumpalo = "3.19.0"
52+
once_cell = "1.21.3"
53+
schemars = "1.0.4"
5254

5355
[dev-dependencies]
5456
subgraphs = { path = "../../bench/subgraphs" }

lib/executor/src/executors/map.rs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ use std::{
66

77
use bytes::{BufMut, Bytes, BytesMut};
88
use dashmap::DashMap;
9-
use hive_router_config::{
10-
override_subgraph_urls::UrlOrExpression, primitives::expression::Expression, HiveRouterConfig,
11-
};
9+
use hive_router_config::{override_subgraph_urls::UrlOrExpression, HiveRouterConfig};
1210
use http::Uri;
1311
use hyper_tls::HttpsConnector;
1412
use hyper_util::{
@@ -17,7 +15,7 @@ use hyper_util::{
1715
};
1816
use tokio::sync::{OnceCell, Semaphore};
1917
use tracing::error;
20-
use vrl::core::Value as VrlValue;
18+
use vrl::{compiler::Program as VrlProgram, core::Value as VrlValue};
2119

2220
use crate::{
2321
execution::client_request_details::ClientRequestDetails,
@@ -30,14 +28,15 @@ use crate::{
3028
http::{HTTPSubgraphExecutor, HttpClient},
3129
},
3230
response::graphql_error::GraphQLError,
31+
utils::expression::{compile_expression, execute_expression_with_value},
3332
};
3433

3534
type SubgraphName = String;
3635
type SubgraphEndpoint = String;
3736
type ExecutorsBySubgraphMap =
3837
DashMap<SubgraphName, DashMap<SubgraphEndpoint, SubgraphExecutorBoxedArc>>;
3938
type EndpointsBySubgraphMap = DashMap<SubgraphName, SubgraphEndpoint>;
40-
type ExpressionsBySubgraphMap = HashMap<SubgraphName, Expression>;
39+
type ExpressionsBySubgraphMap = HashMap<SubgraphName, VrlProgram>;
4140

4241
pub struct SubgraphExecutorMap {
4342
executors_by_subgraph: ExecutorsBySubgraphMap,
@@ -91,7 +90,7 @@ impl SubgraphExecutorMap {
9190

9291
let endpoint_str = match endpoint_str {
9392
Some(UrlOrExpression::Url(url)) => url,
94-
Some(UrlOrExpression::Expression(expression)) => {
93+
Some(UrlOrExpression::Expression { expression }) => {
9594
subgraph_executor_map.register_expression(&subgraph_name, expression)?;
9695
&original_endpoint_str
9796
}
@@ -190,12 +189,13 @@ impl SubgraphExecutorMap {
190189
]));
191190

192191
// Resolve the expression to get an endpoint URL.
193-
let endpoint_result = expression.execute_with_value(value).map_err(|err| {
194-
SubgraphExecutorError::new_endpoint_expression_resolution_failure(
195-
subgraph_name.to_string(),
196-
err,
197-
)
198-
})?;
192+
let endpoint_result =
193+
execute_expression_with_value(expression, value).map_err(|err| {
194+
SubgraphExecutorError::new_endpoint_expression_resolution_failure(
195+
subgraph_name.to_string(),
196+
err,
197+
)
198+
})?;
199199
let endpoint_str = match endpoint_result.as_str() {
200200
Some(s) => s.to_string(),
201201
None => {
@@ -249,10 +249,13 @@ impl SubgraphExecutorMap {
249249
fn register_expression(
250250
&mut self,
251251
subgraph_name: &str,
252-
expression: &Expression,
252+
expression: &str,
253253
) -> Result<(), SubgraphExecutorError> {
254+
let program = compile_expression(expression, None).map_err(|err| {
255+
SubgraphExecutorError::EndpointExpressionBuild(subgraph_name.to_string(), err)
256+
})?;
254257
self.expressions_by_subgraph
255-
.insert(subgraph_name.to_string(), expression.clone());
258+
.insert(subgraph_name.to_string(), program);
256259

257260
Ok(())
258261
}

lib/executor/src/headers/compile.rs

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
use crate::headers::{
2-
errors::HeaderRuleCompileError,
3-
plan::{
4-
HeaderAggregationStrategy, HeaderRulesPlan, RequestHeaderRule, RequestHeaderRules,
5-
RequestInsertExpression, RequestInsertStatic, RequestPropagateNamed, RequestPropagateRegex,
6-
RequestRemoveNamed, RequestRemoveRegex, ResponseHeaderRule, ResponseHeaderRules,
7-
ResponseInsertExpression, ResponseInsertStatic, ResponsePropagateNamed,
8-
ResponsePropagateRegex, ResponseRemoveNamed, ResponseRemoveRegex,
1+
use crate::{
2+
headers::{
3+
errors::HeaderRuleCompileError,
4+
plan::{
5+
HeaderAggregationStrategy, HeaderRulesPlan, RequestHeaderRule, RequestHeaderRules,
6+
RequestInsertExpression, RequestInsertStatic, RequestPropagateNamed,
7+
RequestPropagateRegex, RequestRemoveNamed, RequestRemoveRegex, ResponseHeaderRule,
8+
ResponseHeaderRules, ResponseInsertExpression, ResponseInsertStatic,
9+
ResponsePropagateNamed, ResponsePropagateRegex, ResponseRemoveNamed,
10+
ResponseRemoveRegex,
11+
},
912
},
13+
utils::expression::compile_expression,
1014
};
1115

1216
use hive_router_config::headers as config;
@@ -48,11 +52,14 @@ impl HeaderRuleCompiler<Vec<RequestHeaderRule>> for config::RequestHeaderRule {
4852
value: build_header_value(&rule.name, value)?,
4953
}));
5054
}
51-
config::InsertSource::Expression(expression) => {
55+
config::InsertSource::Expression { expression } => {
56+
let program = compile_expression(expression, None).map_err(|err| {
57+
HeaderRuleCompileError::ExpressionBuild(rule.name.clone(), err)
58+
})?;
5259
actions.push(RequestHeaderRule::InsertExpression(
5360
RequestInsertExpression {
5461
name: build_header_name(&rule.name)?,
55-
expression: Box::new(expression.clone()),
62+
expression: Box::new(program),
5663
},
5764
));
5865
}
@@ -114,16 +121,19 @@ impl HeaderRuleCompiler<Vec<ResponseHeaderRule>> for config::ResponseHeaderRule
114121
strategy: aggregation_strategy,
115122
}));
116123
}
117-
config::InsertSource::Expression(expression) => {
124+
config::InsertSource::Expression { expression } => {
118125
// NOTE: In case we ever need to improve performance and not pass the whole context
119126
// to VRL expressions, we can use:
120127
// - compilation_result.program.info().target_assignments
121128
// - compilation_result.program.info().target_queries
122129
// to determine what parts of the context are actually needed by the expression
130+
let program = compile_expression(expression, None).map_err(|err| {
131+
HeaderRuleCompileError::ExpressionBuild(rule.name.clone(), err)
132+
})?;
123133
actions.push(ResponseHeaderRule::InsertExpression(
124134
ResponseInsertExpression {
125135
name: build_header_name(&rule.name)?,
126-
expression: Box::new(expression.clone()),
136+
expression: Box::new(program),
127137
strategy: aggregation_strategy,
128138
},
129139
));

lib/executor/src/headers/plan.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use ahash::HashMap;
2-
use hive_router_config::primitives::expression::Expression;
32
use http::{HeaderName, HeaderValue};
43
use regex_automata::meta::Regex;
4+
use vrl::compiler::Program as VrlProgram;
55

66
#[derive(Clone)]
77
pub struct HeaderRulesPlan {
@@ -62,13 +62,13 @@ pub struct ResponseInsertStatic {
6262
#[derive(Clone)]
6363
pub struct RequestInsertExpression {
6464
pub name: HeaderName,
65-
pub expression: Box<Expression>,
65+
pub expression: Box<VrlProgram>,
6666
}
6767

6868
#[derive(Clone)]
6969
pub struct ResponseInsertExpression {
7070
pub name: HeaderName,
71-
pub expression: Box<Expression>,
71+
pub expression: Box<VrlProgram>,
7272
pub strategy: HeaderAggregationStrategy,
7373
}
7474

lib/executor/src/headers/request.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::{
1111
},
1212
sanitizer::{is_denied_header, is_never_join_header},
1313
},
14+
utils::expression::execute_expression_with_value,
1415
};
1516

1617
pub fn modify_subgraph_request_headers(
@@ -166,15 +167,9 @@ impl ApplyRequestHeader for RequestInsertExpression {
166167
if is_denied_header(&self.name) {
167168
return Ok(());
168169
}
169-
let value = self
170-
.expression
171-
.execute_with_value(ctx.into())
172-
.map_err(|err| {
173-
HeaderRuleRuntimeError::new_expression_evaluation(
174-
self.name.to_string(),
175-
Box::new(err),
176-
)
177-
})?;
170+
let value = execute_expression_with_value(&self.expression, ctx.into()).map_err(|err| {
171+
HeaderRuleRuntimeError::new_expression_evaluation(self.name.to_string(), Box::new(err))
172+
})?;
178173

179174
if let Some(header_value) = vrl_value_to_header_value(value) {
180175
if is_never_join_header(&self.name) {

lib/executor/src/headers/response.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use crate::{
1313
},
1414
sanitizer::is_denied_header,
1515
},
16+
utils::expression::execute_expression_with_value,
1617
};
1718

1819
use super::sanitizer::is_never_join_header;
@@ -188,13 +189,9 @@ impl ApplyResponseHeader for ResponseInsertExpression {
188189
if is_denied_header(&self.name) {
189190
return Ok(());
190191
}
191-
let value = self
192-
.expression
193-
.execute_with_value(ctx.into())
194-
.map_err(|err| {
195-
HeaderRuleRuntimeError::ExpressionEvaluation(self.name.to_string(), Box::new(err))
196-
})?;
197-
192+
let value = execute_expression_with_value(&self.expression, ctx.into()).map_err(|err| {
193+
HeaderRuleRuntimeError::new_expression_evaluation(self.name.to_string(), Box::new(err))
194+
})?;
198195
if let Some(header_value) = vrl_value_to_header_value(value) {
199196
let strategy = if is_never_join_header(&self.name) {
200197
HeaderAggregationStrategy::Append

0 commit comments

Comments
 (0)