Skip to content

Commit 419beea

Browse files
committed
*: Register network name in query
1 parent 90677ad commit 419beea

File tree

12 files changed

+64
-13
lines changed

12 files changed

+64
-13
lines changed

core/src/subgraph/loader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ where
9494
.into_iter(),
9595
)));
9696

97-
Ok(Query::new(schema, document, variables))
97+
Ok(Query::new(schema, document, variables, None))
9898
}
9999

100100
fn parse_data_sources(

core/tests/interfaces.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ fn insert_and_query(
3333
)?;
3434

3535
let document = graphql_parser::parse_query(query).unwrap();
36-
let query = Query::new(STORE.api_schema(&subgraph_id).unwrap(), document, None);
36+
let query = Query::new(
37+
STORE.api_schema(&subgraph_id).unwrap(),
38+
document,
39+
None,
40+
STORE.network_name(&subgraph_id).unwrap(),
41+
);
3742
Ok(execute_subgraph_query(query))
3843
}
3944

graph/src/data/query/query.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,21 +111,25 @@ pub struct Query {
111111
pub document: q::Document,
112112
pub variables: Option<QueryVariables>,
113113
pub shape_hash: u64,
114+
pub network: Option<String>,
114115
_force_use_of_new: (),
115116
}
116117

117118
impl Query {
119+
/// The `network` is currently used only for caching purposes, so it is not mandatory.
118120
pub fn new(
119121
schema: Arc<Schema>,
120122
document: q::Document,
121123
variables: Option<QueryVariables>,
124+
network: Option<String>,
122125
) -> Self {
123126
let shape_hash = shape_hash(&document);
124127
Query {
125128
schema,
126129
document,
127130
variables,
128131
shape_hash,
132+
network,
129133
_force_use_of_new: (),
130134
}
131135
}

graph/src/data/subgraph/schema/queries.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ impl<S: SubgraphDeploymentStore, Q: GraphQlRunner> LazyMetadata<S, Q> {
3838
Some(QueryVariables::new(HashMap::from_iter(
3939
vec![(String::from("id"), q::Value::String(self.id.to_string()))].into_iter(),
4040
))),
41+
None,
4142
))
4243
.await?;
4344

@@ -72,6 +73,7 @@ impl<S: SubgraphDeploymentStore, Q: GraphQlRunner> LazyMetadata<S, Q> {
7273
Some(QueryVariables::new(HashMap::from_iter(
7374
vec![(String::from("id"), q::Value::String(self.id.to_string()))].into_iter(),
7475
))),
76+
None,
7577
))
7678
.await?;
7779

graphql/tests/introspection.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,7 @@ fn introspection_query(schema: Schema, query: &str) -> QueryResult {
553553
Arc::new(schema),
554554
graphql_parser::parse_query(query).unwrap(),
555555
None,
556+
None,
556557
);
557558

558559
// Execute it

graphql/tests/query.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ fn execute_query_document_with_variables(
231231
variables: Option<QueryVariables>,
232232
) -> QueryResult {
233233
let runner = GraphQlRunner::new(&*LOGGER, STORE.clone(), LOAD_MANAGER.clone());
234-
let query = Query::new(Arc::new(api_test_schema()), query, variables);
234+
let query = Query::new(Arc::new(api_test_schema()), query, variables, None);
235235

236236
return_err!(runner.execute(query, None, None, None))
237237
.as_ref()
@@ -715,6 +715,7 @@ fn query_complexity() {
715715
)
716716
.unwrap(),
717717
None,
718+
None,
718719
);
719720
let max_complexity = Some(1_010_100);
720721

@@ -744,6 +745,7 @@ fn query_complexity() {
744745
)
745746
.unwrap(),
746747
None,
748+
None,
747749
);
748750

749751
// The extra introspection causes the complexity to go over.
@@ -776,6 +778,7 @@ async fn query_complexity_subscriptions() {
776778
)
777779
.unwrap(),
778780
None,
781+
None,
779782
);
780783
let max_complexity = Some(1_010_100);
781784
let options = SubscriptionExecutionOptions {
@@ -813,6 +816,7 @@ async fn query_complexity_subscriptions() {
813816
)
814817
.unwrap(),
815818
None,
819+
None,
816820
);
817821

818822
let options = SubscriptionExecutionOptions {
@@ -841,6 +845,7 @@ fn instant_timeout() {
841845
Arc::new(api_test_schema()),
842846
graphql_parser::parse_query("query { musicians(first: 100) { name } }").unwrap(),
843847
None,
848+
None,
844849
);
845850

846851
match execute_subgraph_query_with_deadline(query, Some(Instant::now()))
@@ -1140,6 +1145,7 @@ async fn subscription_gets_result_even_without_events() {
11401145
)
11411146
.unwrap(),
11421147
None,
1148+
None,
11431149
);
11441150

11451151
let options = SubscriptionExecutionOptions {

mock/src/store.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,5 +226,7 @@ pub fn mock_store_with_users_subgraph() -> (Arc<MockStore>, SubgraphDeploymentId
226226
Ok(Arc::new(schema))
227227
});
228228

229+
store.expect_network_name().returning(|_| Ok(None));
230+
229231
(Arc::new(store), subgraph_id)
230232
}

server/http/src/request.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,17 @@ use graph::prelude::*;
99
pub struct GraphQLRequest {
1010
body: Bytes,
1111
schema: Arc<Schema>,
12+
network: Option<String>,
1213
}
1314

1415
impl GraphQLRequest {
1516
/// Creates a new GraphQLRequest future based on an HTTP request and a result sender.
16-
pub fn new(body: Bytes, schema: Arc<Schema>) -> Self {
17-
GraphQLRequest { body, schema }
17+
pub fn new(body: Bytes, schema: Arc<Schema>, network: Option<String>) -> Self {
18+
GraphQLRequest {
19+
body,
20+
schema,
21+
network,
22+
}
1823
}
1924
}
2025

@@ -65,7 +70,12 @@ impl Future for GraphQLRequest {
6570
)),
6671
}?;
6772

68-
Ok(Async::Ready(Query::new(schema, document, variables)))
73+
Ok(Async::Ready(Query::new(
74+
schema,
75+
document,
76+
variables,
77+
self.network.clone(),
78+
)))
6979
}
7080
}
7181

@@ -86,15 +96,16 @@ mod tests {
8696
fn rejects_invalid_json() {
8797
let schema =
8898
Schema::parse(EXAMPLE_SCHEMA, SubgraphDeploymentId::new("test").unwrap()).unwrap();
89-
let request = GraphQLRequest::new(hyper::body::Bytes::from("!@#)%"), Arc::new(schema));
99+
let request =
100+
GraphQLRequest::new(hyper::body::Bytes::from("!@#)%"), Arc::new(schema), None);
90101
request.wait().expect_err("Should reject invalid JSON");
91102
}
92103

93104
#[test]
94105
fn rejects_json_without_query_field() {
95106
let schema =
96107
Schema::parse(EXAMPLE_SCHEMA, SubgraphDeploymentId::new("test").unwrap()).unwrap();
97-
let request = GraphQLRequest::new(hyper::body::Bytes::from("{}"), Arc::new(schema));
108+
let request = GraphQLRequest::new(hyper::body::Bytes::from("{}"), Arc::new(schema), None);
98109
request
99110
.wait()
100111
.expect_err("Should reject JSON without query field");
@@ -104,8 +115,11 @@ mod tests {
104115
fn rejects_json_with_non_string_query_field() {
105116
let schema =
106117
Schema::parse(EXAMPLE_SCHEMA, SubgraphDeploymentId::new("test").unwrap()).unwrap();
107-
let request =
108-
GraphQLRequest::new(hyper::body::Bytes::from("{\"query\": 5}"), Arc::new(schema));
118+
let request = GraphQLRequest::new(
119+
hyper::body::Bytes::from("{\"query\": 5}"),
120+
Arc::new(schema),
121+
None,
122+
);
109123
request
110124
.wait()
111125
.expect_err("Should reject JSON with a non-string query field");
@@ -118,6 +132,7 @@ mod tests {
118132
let request = GraphQLRequest::new(
119133
hyper::body::Bytes::from("{\"query\": \"foo\"}"),
120134
Arc::new(schema),
135+
None,
121136
);
122137
request.wait().expect_err("Should reject broken queries");
123138
}
@@ -129,6 +144,7 @@ mod tests {
129144
let request = GraphQLRequest::new(
130145
hyper::body::Bytes::from("{\"query\": \"{ user { name } }\"}"),
131146
Arc::new(schema),
147+
None,
132148
);
133149
let query = request.wait().expect("Should accept valid queries");
134150
assert_eq!(
@@ -150,6 +166,7 @@ mod tests {
150166
}",
151167
),
152168
Arc::new(schema),
169+
None,
153170
);
154171
let query = request.wait().expect("Should accept null variables");
155172

@@ -171,6 +188,7 @@ mod tests {
171188
}",
172189
),
173190
Arc::new(schema),
191+
None,
174192
);
175193
request.wait().expect_err("Should reject non-map variables");
176194
}
@@ -190,6 +208,7 @@ mod tests {
190208
}",
191209
),
192210
Arc::new(schema),
211+
None,
193212
);
194213
let query = request.wait().expect("Should accept valid queries");
195214

server/http/src/service.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,17 @@ where
260260
}
261261
};
262262

263+
let network = match self.store.network_name(&id) {
264+
Ok(network) => network,
265+
Err(e) => {
266+
return Err(GraphQLServerError::InternalError(e.to_string()));
267+
}
268+
};
269+
263270
let start = Instant::now();
264271
hyper::body::to_bytes(request_body)
265272
.map_err(|_| GraphQLServerError::from("Failed to read request body"))
266-
.and_then(move |body| GraphQLRequest::new(body, schema).compat())
273+
.and_then(move |body| GraphQLRequest::new(body, schema, network).compat())
267274
.and_then(move |query| {
268275
// Run the query using the query runner
269276
tokio::task::block_in_place(|| {

server/index-node/src/request.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ impl Future for IndexNodeRequest {
6666
)),
6767
}?;
6868

69-
Ok(Async::Ready(Query::new(schema, document, variables)))
69+
Ok(Async::Ready(Query::new(schema, document, variables, None)))
7070
}
7171
}
7272

0 commit comments

Comments
 (0)