From d360074323e817847f78f97c3a6869abd014a7e1 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Wed, 10 Jan 2018 13:35:23 +0300 Subject: [PATCH] SecretStore: do not send init if session has finished/failed instantly (#7397) --- .../key_server_cluster/jobs/job_session.rs | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/secret_store/src/key_server_cluster/jobs/job_session.rs b/secret_store/src/key_server_cluster/jobs/job_session.rs index 10752fbd3..bfd520785 100644 --- a/secret_store/src/key_server_cluster/jobs/job_session.rs +++ b/secret_store/src/key_server_cluster/jobs/job_session.rs @@ -200,22 +200,13 @@ impl JobSession where Executor: JobExe return Err(Error::InvalidStateForRequest); } - // send requests to slave nodes - let mut waits_for_self = false; + // result from self let active_data = ActiveJobSessionData { - requests: nodes, + requests: nodes.clone(), rejects: BTreeSet::new(), responses: BTreeMap::new(), }; - for node in &active_data.requests { - if node != &self.meta.self_node_id { - self.transport.send_partial_request(&node, self.executor.prepare_partial_request(node, &active_data.requests)?)?; - } else { - waits_for_self = true; - } - } - - // result from self + let waits_for_self = active_data.requests.contains(&self.meta.self_node_id); let self_response = if waits_for_self { let partial_request = self.executor.prepare_partial_request(&self.meta.self_node_id, &active_data.requests)?; Some(self.executor.process_partial_request(partial_request)?) @@ -236,6 +227,13 @@ impl JobSession where Executor: JobExe } } + // send requests to save nodes. we only send requests if session is still active. + if self.data.state == JobSessionState::Active { + for node in nodes.iter().filter(|n| **n != self.meta.self_node_id) { + self.transport.send_partial_request(node, self.executor.prepare_partial_request(node, &nodes)?)?; + } + } + Ok(()) }