Publish Clusterflux 1d0b6fa filtered source
This commit is contained in:
commit
e5d609cfb2
226 changed files with 86613 additions and 0 deletions
38
crates/clusterflux-node/src/coordinator_session.rs
Normal file
38
crates/clusterflux-node/src/coordinator_session.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#[cfg(test)]
|
||||
use clusterflux_control::endpoint_identity;
|
||||
use clusterflux_control::ControlSession;
|
||||
use clusterflux_core::coordinator_wire_request;
|
||||
use serde_json::Value;
|
||||
|
||||
pub(crate) struct CoordinatorSession {
|
||||
inner: ControlSession,
|
||||
}
|
||||
|
||||
impl CoordinatorSession {
|
||||
pub(crate) fn connect(addr: &str) -> Result<Self, Box<dyn std::error::Error>> {
|
||||
Ok(Self {
|
||||
inner: ControlSession::connect(addr)?,
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn request(&mut self, value: Value) -> Result<Value, Box<dyn std::error::Error>> {
|
||||
let request_id = format!("node-{}", self.inner.requests() + 1);
|
||||
let wire_request = coordinator_wire_request(request_id, value);
|
||||
let response = self.inner.request(&wire_request)?;
|
||||
if response.get("type").and_then(Value::as_str) == Some("error") {
|
||||
return Err(format!("coordinator error: {response}").into());
|
||||
}
|
||||
Ok(response)
|
||||
}
|
||||
|
||||
pub(crate) fn requests(&self) -> usize {
|
||||
self.inner.requests() as usize
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) fn control_endpoint_identity(
|
||||
endpoint: &str,
|
||||
) -> Result<String, Box<dyn std::error::Error>> {
|
||||
Ok(endpoint_identity(endpoint)?)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue