Refactoring

This commit is contained in:
Dominik Werder
2022-06-15 14:27:38 +02:00
parent 7063842c4c
commit 9e3395bf13
25 changed files with 429 additions and 421 deletions

View File

@@ -31,7 +31,6 @@ pub async fn events_service(node_config: NodeConfigCached) -> Result<(), Error>
}
async fn events_conn_handler(stream: TcpStream, addr: SocketAddr, node_config: NodeConfigCached) -> Result<(), Error> {
//use tracing_futures::Instrument;
let span1 = span!(Level::INFO, "events_conn_handler");
let r = events_conn_handler_inner(stream, addr, &node_config)
.instrument(span1)
@@ -39,7 +38,7 @@ async fn events_conn_handler(stream: TcpStream, addr: SocketAddr, node_config: N
match r {
Ok(k) => Ok(k),
Err(e) => {
error!("raw_conn_handler sees error: {:?}", e);
error!("events_conn_handler sees error: {:?}", e);
Err(e)
}
}
@@ -53,8 +52,14 @@ async fn events_conn_handler_inner(
match events_conn_handler_inner_try(stream, addr, node_config).await {
Ok(_) => (),
Err(ce) => {
// TODO pass errors over network.
error!("events_conn_handler_inner: {:?}", ce.err);
// Try to pass the error over the network.
// If that fails, give error to the caller.
let mut out = ce.netout;
let e = ce.err;
let buf = items::frame::make_error_frame(&e)?;
//type T = StreamItem<items::RangeCompletableItem<items::scalarevents::ScalarEvents<u32>>>;
//let buf = Err::<T, _>(e).make_frame()?;
out.write_all(&buf).await?;
}
}
Ok(())
@@ -118,11 +123,17 @@ async fn events_conn_handler_inner_try(
};
info!("events_conn_handler_inner_try evq {:?}", evq);
if evq.do_test_main_error {
let e = Error::with_msg(format!("Test error private message."))
.add_public_msg(format!("Test error PUBLIC message."));
return Err((e, netout).into());
}
let mut p1: Pin<Box<dyn Stream<Item = Box<dyn Framable>> + Send>> =
if let Some(conf) = &node_config.node_config.cluster.scylla {
let scyco = conf;
let dbconf = node_config.node_config.cluster.database.clone();
match make_scylla_stream(&evq, scyco, dbconf).await {
match make_scylla_stream(&evq, scyco, dbconf, evq.do_test_stream_error).await {
Ok(j) => j,
Err(e) => return Err((e, netout))?,
}

View File

@@ -169,10 +169,16 @@ pub struct ScyllaFramableStream {
shape: Option<Shape>,
scy: Arc<ScySession>,
pgclient: Arc<PgClient>,
do_test_stream_error: bool,
}
impl ScyllaFramableStream {
pub fn new(evq: &RawEventsQuery, scy: Arc<ScySession>, pgclient: Arc<PgClient>) -> Self {
pub fn new(
evq: &RawEventsQuery,
scy: Arc<ScySession>,
pgclient: Arc<PgClient>,
do_test_stream_error: bool,
) -> Self {
Self {
state: FrState::New,
series: evq.channel.series.unwrap(),
@@ -183,6 +189,7 @@ impl ScyllaFramableStream {
shape: None,
scy,
pgclient,
do_test_stream_error,
}
}
}
@@ -192,6 +199,13 @@ impl Stream for ScyllaFramableStream {
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
use Poll::*;
if self.do_test_stream_error {
let e = Error::with_msg(format!("Test PRIVATE STREAM error."))
.add_public_msg(format!("Test PUBLIC STREAM error."));
return Ready(Some(
Box::new(Err::<StreamItem<RangeCompletableItem<ScalarEvents<f32>>>, _>(e)) as _,
));
}
loop {
break match self.state {
FrState::New => {
@@ -296,7 +310,7 @@ async fn find_series(series: u64, pgclient: Arc<PgClient>) -> Result<(ScalarType
}
async fn find_ts_msp(series: i64, range: NanoRange, scy: Arc<ScySession>) -> Result<Vec<u64>, Error> {
info!("find_ts_msp series {} {:?}", series, range);
trace!("find_ts_msp series {} {:?}", series, range);
// TODO use prepared statements
let cql = "select ts_msp from ts_msp where series = ? and ts_msp < ? order by ts_msp desc limit 1";
let res = scy.query(cql, (series, range.beg as i64)).await.err_conv()?;
@@ -305,7 +319,7 @@ async fn find_ts_msp(series: i64, range: NanoRange, scy: Arc<ScySession>) -> Res
let row = row.err_conv()?;
before.push(row.0 as u64);
}
info!("FOUND BEFORE THE REQUESTED TIME: {} {:?}", before.len(), before);
trace!("FOUND BEFORE THE REQUESTED TIME: {} {:?}", before.len(), before);
let cql = "select ts_msp from ts_msp where series = ? and ts_msp >= ? and ts_msp < ?";
let res = scy
.query(cql, (series, range.beg as i64, range.end as i64))
@@ -319,7 +333,7 @@ async fn find_ts_msp(series: i64, range: NanoRange, scy: Arc<ScySession>) -> Res
let row = row.err_conv()?;
ret.push(row.0 as u64);
}
info!("found in total {} rows {:?}", ret.len(), ret);
trace!("found in total {} rows", ret.len());
Ok(ret)
}
@@ -333,7 +347,7 @@ macro_rules! read_next_scalar_values {
) -> Result<ScalarEvents<$st>, Error> {
type ST = $st;
type SCYTY = $scyty;
info!("{} series {} ts_msp {}", stringify!($fname), series, ts_msp);
trace!("{} series {} ts_msp {}", stringify!($fname), series, ts_msp);
let _ts_lsp_max = if range.end <= ts_msp {
// TODO we should not be here...
} else {
@@ -364,7 +378,7 @@ macro_rules! read_next_scalar_values {
ret.push(ts, pulse, value);
}
}
info!(
trace!(
"found in total {} events ts_msp {} discarded {}",
ret.tss.len(),
ts_msp,
@@ -416,6 +430,7 @@ pub async fn make_scylla_stream(
evq: &RawEventsQuery,
scyco: &ScyllaConfig,
dbconf: Database,
do_test_stream_error: bool,
) -> Result<Pin<Box<dyn Stream<Item = Box<dyn Framable>> + Send>>, Error> {
info!("make_scylla_stream open scylla connection");
// TODO reuse existing connection:
@@ -434,7 +449,7 @@ pub async fn make_scylla_stream(
tokio::spawn(pgconn);
let pgclient = Arc::new(pgclient);
let scy = Arc::new(scy);
let res = Box::pin(ScyllaFramableStream::new(evq, scy, pgclient)) as _;
let res = Box::pin(ScyllaFramableStream::new(evq, scy, pgclient, do_test_stream_error)) as _;
Ok(res)
}