Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9fc8068

Browse files
committed
core: Address review on SubgraphProvider
1 parent f8fdd1f commit 9fc8068

File tree

4 files changed

+56
-62
lines changed

4 files changed

+56
-62
lines changed

core/src/subgraph/provider.rs

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,37 @@ impl<L: LinkResolver> SubgraphProvider<L> {
4141
name: String,
4242
id: String,
4343
) -> impl Future<Item = (), Error = SubgraphProviderError> + Send + 'static {
44-
let graphql_remove_sink = self.schema_event_sink.clone();
45-
let host_remove_sink = self.event_sink.clone();
46-
graphql_remove_sink
44+
self.schema_event_sink
45+
.clone()
4746
.send(SchemaEvent::SchemaRemoved(name, id.clone()))
48-
.map_err(|e| panic!("Failed to forward schema removal: {}", e))
47+
.map_err(|e| panic!("failed to forward schema removal: {}", e))
4948
.map(|_| ())
5049
.join(
51-
host_remove_sink
50+
self.event_sink
51+
.clone()
5252
.send(SubgraphProviderEvent::SubgraphRemoved(id))
5353
.map(|_| ())
54-
.map_err(|e| panic!("Failed to forward subgraph removal: {}", e)),
54+
.map_err(|e| panic!("failed to forward subgraph removal: {}", e)),
5555
).map(|_| ())
5656
}
57+
58+
/// Clones but forcing receivers to `None`.
59+
fn clone(&self) -> Self {
60+
SubgraphProvider {
61+
_logger: self._logger.clone(),
62+
event_stream: None,
63+
event_sink: self.event_sink.clone(),
64+
schema_event_stream: None,
65+
schema_event_sink: self.schema_event_sink.clone(),
66+
resolver: self.resolver.clone(),
67+
subgraphs: self.subgraphs.clone(),
68+
}
69+
}
5770
}
5871

5972
impl<L: LinkResolver> SubgraphProviderTrait for SubgraphProvider<L> {
6073
fn deploy(
61-
arc_self: &Arc<Self>,
74+
&self,
6275
name: String,
6376
link: String,
6477
) -> Box<Future<Item = (), Error = SubgraphProviderError> + Send + 'static> {
@@ -70,9 +83,9 @@ impl<L: LinkResolver> SubgraphProviderTrait for SubgraphProvider<L> {
7083
return Box::new(Err(SubgraphProviderError::InvalidName(name)).into_future());
7184
}
7285

73-
let arc_self = arc_self.clone();
86+
let self_clone = self.clone();
7487
Box::new(
75-
SubgraphManifest::resolve(name.clone(), Link { link }, arc_self.resolver.clone())
88+
SubgraphManifest::resolve(name.clone(), Link { link }, self_clone.resolver.clone())
7689
.map_err(SubgraphProviderError::ResolveError)
7790
.and_then(
7891
// Validate the subgraph schema before deploying the subgraph
@@ -85,38 +98,33 @@ impl<L: LinkResolver> SubgraphProviderTrait for SubgraphProvider<L> {
8598
.schema
8699
.add_subgraph_id_directives(subgraph.id.clone());
87100

88-
let old_id = arc_self
101+
let old_id = self_clone
89102
.subgraphs
90103
.lock()
91104
.unwrap()
92105
.insert(name.clone(), subgraph.id.clone());
93106

94107
// If a subgraph is being updated, remove the old subgraph.
95-
let removal_arc_self = arc_self.clone();
96108
if let Some(id) = old_id {
97-
Box::new(
98-
arc_self
99-
.send_remove_events(name, id)
100-
.map(move |_| (removal_arc_self, subgraph)),
101-
)
102-
as Box<Future<Item = _, Error = _> + Send + 'static>
109+
Box::new(self_clone.send_remove_events(name, id))
103110
} else {
104-
Box::new(future::ok::<_, SubgraphProviderError>((arc_self, subgraph)))
105-
}
106-
}).and_then(|(arc_self, subgraph)| {
107-
// Push the subgraph and the schema into their streams
108-
arc_self
109-
.schema_event_sink
110-
.clone()
111-
.send(SchemaEvent::SchemaAdded(subgraph.schema.clone()))
112-
.map_err(|e| panic!("Failed to forward subgraph schema: {}", e))
113-
.join(
114-
arc_self
115-
.event_sink
116-
.clone()
117-
.send(SubgraphProviderEvent::SubgraphAdded(subgraph))
118-
.map_err(|e| panic!("Failed to forward subgraph: {}", e)),
119-
).map(|_| ())
111+
Box::new(future::ok(()))
112+
as Box<Future<Item = _, Error = _> + Send + 'static>
113+
}.and_then(move |_| {
114+
// Push the subgraph and the schema into their streams
115+
self_clone
116+
.schema_event_sink
117+
.clone()
118+
.send(SchemaEvent::SchemaAdded(subgraph.schema.clone()))
119+
.map_err(|e| panic!("failed to forward subgraph schema: {}", e))
120+
.join(
121+
self_clone
122+
.event_sink
123+
.clone()
124+
.send(SubgraphProviderEvent::SubgraphAdded(subgraph))
125+
.map_err(|e| panic!("failed to forward subgraph: {}", e)),
126+
).map(|_| ())
127+
})
120128
}),
121129
)
122130
}
@@ -188,7 +196,7 @@ fn rejects_name_bad_for_urls() {
188196
let logger = slog::Logger::root(slog::Discard, o!());
189197
let provider = Arc::new(SubgraphProvider::new(logger, Arc::new(FakeLinkResolver)));
190198
let bad = "/../funky%2F:9001".to_owned();
191-
let result = SubgraphProvider::deploy(&provider, bad.clone(), "".to_owned());
199+
let result = provider.deploy(bad.clone(), "".to_owned());
192200
match result.wait() {
193201
Err(SubgraphProviderError::InvalidName(name)) => assert_eq!(name, bad),
194202
x => panic!("unexpected test result {:?}", x),

core/tests/tests.rs

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -182,19 +182,13 @@ fn subgraph_provider_events() {
182182

183183
// Deploy
184184
runtime
185-
.block_on(SubgraphProvider::deploy(
186-
&provider,
187-
"subgraph".to_owned(),
188-
subgraph1_link.clone(),
189-
)).unwrap();
185+
.block_on(provider.deploy("subgraph".to_owned(), subgraph1_link.clone()))
186+
.unwrap();
190187

191188
// Update
192189
runtime
193-
.block_on(SubgraphProvider::deploy(
194-
&provider,
195-
"subgraph".to_owned(),
196-
subgraph2_link.clone(),
197-
)).unwrap();
190+
.block_on(provider.deploy("subgraph".to_owned(), subgraph2_link.clone()))
191+
.unwrap();
198192

199193
// Remove
200194
runtime
@@ -271,17 +265,11 @@ fn subgraph_list() {
271265

272266
assert!(provider.list().is_empty());
273267
runtime
274-
.block_on(SubgraphProvider::deploy(
275-
&provider,
276-
"subgraph1".to_owned(),
277-
subgraph1_link.clone(),
278-
)).unwrap();
268+
.block_on(provider.deploy("subgraph1".to_owned(), subgraph1_link.clone()))
269+
.unwrap();
279270
runtime
280-
.block_on(SubgraphProvider::deploy(
281-
&provider,
282-
"subgraph2".to_owned(),
283-
subgraph2_link.clone(),
284-
)).unwrap();
271+
.block_on(provider.deploy("subgraph2".to_owned(), subgraph2_link.clone()))
272+
.unwrap();
285273
assert_eq!(
286274
provider.list(),
287275
[

graph/src/components/subgraph/provider.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub trait SubgraphProvider:
2323
EventProducer<SubgraphProviderEvent> + EventProducer<SchemaEvent> + Send + Sync + 'static
2424
{
2525
fn deploy(
26-
arc_self: &Arc<Self>,
26+
&self,
2727
name: String,
2828
link: String,
2929
) -> Box<Future<Item = (), Error = SubgraphProviderError> + Send + 'static>;

server/json-rpc/src/lib.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,11 @@ impl<T: SubgraphProvider> JsonRpcServer<T> {
112112
}
113113

114114
Box::new(
115-
SubgraphProvider::deploy(
116-
&self.provider,
117-
params.name,
118-
format!("/ipfs/{}", params.ipfs_hash),
119-
).map_err(|e| json_rpc_error(JSON_RPC_DEPLOY_ERROR, e.to_string()))
120-
.map(|_| Ok(Value::Null))
121-
.flatten(),
115+
self.provider
116+
.deploy(params.name, format!("/ipfs/{}", params.ipfs_hash))
117+
.map_err(|e| json_rpc_error(JSON_RPC_DEPLOY_ERROR, e.to_string()))
118+
.map(|_| Ok(Value::Null))
119+
.flatten(),
122120
)
123121
}
124122

0 commit comments

Comments
 (0)