Alternative insert queue worker
This commit is contained in:
@@ -40,6 +40,7 @@ use serde::Serialize;
|
||||
use series::ChannelStatusSeriesId;
|
||||
use series::SeriesId;
|
||||
use stats::CaConnStats;
|
||||
use stats::CaProtoStats;
|
||||
use stats::IntervalEma;
|
||||
use std::collections::BTreeMap;
|
||||
use std::collections::VecDeque;
|
||||
@@ -502,8 +503,10 @@ pub struct CaConn {
|
||||
channel_info_query_sending: SenderPolling<ChannelInfoQuery>,
|
||||
time_binners: BTreeMap<Cid, ConnTimeBin>,
|
||||
thr_msg_poll: ThrottleTrace,
|
||||
ca_proto_stats: Arc<CaProtoStats>,
|
||||
}
|
||||
|
||||
#[cfg(DISABLED)]
|
||||
impl Drop for CaConn {
|
||||
fn drop(&mut self) {
|
||||
debug!("~~~~~~~~~~~~~~~ Drop CaConn {}", self.remote_addr_dbg);
|
||||
@@ -519,6 +522,7 @@ impl CaConn {
|
||||
storage_insert_tx: Sender<QueryItem>,
|
||||
channel_info_query_tx: Sender<ChannelInfoQuery>,
|
||||
stats: Arc<CaConnStats>,
|
||||
ca_proto_stats: Arc<CaProtoStats>,
|
||||
) -> Self {
|
||||
let (cq_tx, cq_rx) = async_channel::bounded(32);
|
||||
Self {
|
||||
@@ -554,6 +558,7 @@ impl CaConn {
|
||||
channel_info_query_sending: SenderPolling::new(channel_info_query_tx),
|
||||
time_binners: BTreeMap::new(),
|
||||
thr_msg_poll: ThrottleTrace::new(Duration::from_millis(10000)),
|
||||
ca_proto_stats,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1614,7 +1619,12 @@ impl CaConn {
|
||||
status: ConnectionStatus::Established,
|
||||
}));
|
||||
self.backoff_reset();
|
||||
let proto = CaProto::new(tcp, self.remote_addr_dbg.clone(), self.opts.array_truncate);
|
||||
let proto = CaProto::new(
|
||||
tcp,
|
||||
self.remote_addr_dbg.clone(),
|
||||
self.opts.array_truncate,
|
||||
self.ca_proto_stats.clone(),
|
||||
);
|
||||
self.state = CaConnState::Init;
|
||||
self.proto = Some(proto);
|
||||
Ok(Ready(Some(())))
|
||||
|
||||
@@ -47,6 +47,7 @@ use statemap::WithStatusSeriesIdStateInner;
|
||||
use statemap::CHANNEL_STATUS_DUMMY_SCALAR_TYPE;
|
||||
use stats::CaConnSetStats;
|
||||
use stats::CaConnStats;
|
||||
use stats::CaProtoStats;
|
||||
use std::collections::BTreeMap;
|
||||
use std::collections::VecDeque;
|
||||
use std::net::SocketAddr;
|
||||
@@ -214,6 +215,7 @@ pub struct CaConnSetCtrl {
|
||||
rx: Receiver<CaConnSetItem>,
|
||||
stats: Arc<CaConnSetStats>,
|
||||
ca_conn_stats: Arc<CaConnStats>,
|
||||
ca_proto_stats: Arc<CaProtoStats>,
|
||||
jh: JoinHandle<Result<(), Error>>,
|
||||
}
|
||||
|
||||
@@ -268,6 +270,10 @@ impl CaConnSetCtrl {
|
||||
pub fn ca_conn_stats(&self) -> &Arc<CaConnStats> {
|
||||
&self.ca_conn_stats
|
||||
}
|
||||
|
||||
pub fn ca_proto_stats(&self) -> &Arc<CaProtoStats> {
|
||||
&self.ca_proto_stats
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -323,6 +329,7 @@ pub struct CaConnSet {
|
||||
thr_msg_poll_1: ThrottleTrace,
|
||||
thr_msg_storage_len: ThrottleTrace,
|
||||
did_connset_out_queue: bool,
|
||||
ca_proto_stats: Arc<CaProtoStats>,
|
||||
}
|
||||
|
||||
impl CaConnSet {
|
||||
@@ -341,10 +348,8 @@ impl CaConnSet {
|
||||
super::finder::start_finder(find_ioc_res_tx.clone(), backend.clone(), pgconf);
|
||||
let (channel_info_res_tx, channel_info_res_rx) = async_channel::bounded(400);
|
||||
let stats = Arc::new(CaConnSetStats::new());
|
||||
let ca_proto_stats = Arc::new(CaProtoStats::new());
|
||||
let ca_conn_stats = Arc::new(CaConnStats::new());
|
||||
stats.test_1().inc();
|
||||
stats.test_1().inc();
|
||||
stats.test_1().inc();
|
||||
let connset = Self {
|
||||
backend,
|
||||
local_epics_hostname,
|
||||
@@ -378,6 +383,7 @@ impl CaConnSet {
|
||||
thr_msg_poll_1: ThrottleTrace::new(Duration::from_millis(2000)),
|
||||
thr_msg_storage_len: ThrottleTrace::new(Duration::from_millis(1000)),
|
||||
did_connset_out_queue: false,
|
||||
ca_proto_stats: ca_proto_stats.clone(),
|
||||
};
|
||||
// TODO await on jh
|
||||
let jh = tokio::spawn(CaConnSet::run(connset));
|
||||
@@ -386,6 +392,7 @@ impl CaConnSet {
|
||||
rx: connset_out_rx,
|
||||
stats,
|
||||
ca_conn_stats,
|
||||
ca_proto_stats,
|
||||
jh,
|
||||
}
|
||||
}
|
||||
@@ -766,6 +773,7 @@ impl CaConnSet {
|
||||
self.storage_insert_tx.clone(),
|
||||
self.channel_info_query_tx.clone(),
|
||||
self.ca_conn_stats.clone(),
|
||||
self.ca_proto_stats.clone(),
|
||||
);
|
||||
let conn_tx = conn.conn_command_tx();
|
||||
let conn_stats = conn.stats();
|
||||
@@ -817,6 +825,7 @@ impl CaConnSet {
|
||||
Err(e) => {
|
||||
error!("CaConn gives error: {e:?}");
|
||||
ret = Err(e);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use futures_util::Stream;
|
||||
use log::*;
|
||||
use netpod::timeunits::*;
|
||||
use slidebuf::SlideBuf;
|
||||
use stats::CaProtoStats;
|
||||
use std::collections::BTreeMap;
|
||||
use std::collections::VecDeque;
|
||||
use std::io;
|
||||
@@ -13,6 +14,7 @@ use std::net::SocketAddrV4;
|
||||
use std::num::NonZeroU16;
|
||||
use std::num::NonZeroU64;
|
||||
use std::pin::Pin;
|
||||
use std::sync::Arc;
|
||||
use std::task::Context;
|
||||
use std::task::Poll;
|
||||
use taskrun::tokio;
|
||||
@@ -948,19 +950,21 @@ pub struct CaProto {
|
||||
out: VecDeque<CaMsg>,
|
||||
array_truncate: usize,
|
||||
logged_proto_error_for_cid: BTreeMap<u32, bool>,
|
||||
stats: Arc<CaProtoStats>,
|
||||
}
|
||||
|
||||
impl CaProto {
|
||||
pub fn new(tcp: TcpStream, remote_addr_dbg: SocketAddrV4, array_truncate: usize) -> Self {
|
||||
pub fn new(tcp: TcpStream, remote_addr_dbg: SocketAddrV4, array_truncate: usize, stats: Arc<CaProtoStats>) -> Self {
|
||||
Self {
|
||||
tcp,
|
||||
remote_addr_dbg,
|
||||
state: CaState::StdHead,
|
||||
buf: SlideBuf::new(1024 * 128),
|
||||
buf: SlideBuf::new(1024 * 512),
|
||||
outbuf: SlideBuf::new(1024 * 128),
|
||||
out: VecDeque::new(),
|
||||
array_truncate,
|
||||
logged_proto_error_for_cid: BTreeMap::new(),
|
||||
stats,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1083,7 +1087,11 @@ impl CaProto {
|
||||
info!("received data {:?}", &rbuf.filled()[0..t]);
|
||||
}
|
||||
match self.buf.wadv(nf) {
|
||||
Ok(()) => Ok(Some(Ready(CaItem::empty()))),
|
||||
Ok(()) => {
|
||||
self.stats.tcp_recv_bytes().add(nf as _);
|
||||
self.stats.tcp_recv_count().inc();
|
||||
Ok(Some(Ready(CaItem::empty())))
|
||||
}
|
||||
Err(e) => {
|
||||
error!("netbuf wadv fail nf {nf}");
|
||||
Err(e.into())
|
||||
|
||||
Reference in New Issue
Block a user