mod events;
mod lifecycle;
mod metrics;
mod query;
mod wire;
#[cfg(test)]
mod tests;
use std::collections::HashSet;
use std::sync::atomic::AtomicUsize;
use dashmap::DashMap;
use super::{SubscriptionConfig, SubscriptionId};
use crate::subscription::Subscription;
pub struct SubscriptionManager {
pub(crate) subscriptions: DashMap<SubscriptionId, Subscription>,
pub(crate) table_index: DashMap<String, HashSet<SubscriptionId>>,
pub(crate) connection_index: DashMap<String, HashSet<SubscriptionId>>,
pub(crate) wire_id_index: DashMap<[u8; 16], SubscriptionId>,
pub(crate) config: SubscriptionConfig,
pub(crate) limit_exceeded_count: AtomicUsize,
pub(crate) result_set_exceeded_count: AtomicUsize,
pub(crate) subscription_count_atomic: AtomicUsize,
pub(crate) connection_subscription_counts: DashMap<String, AtomicUsize>,
}
impl SubscriptionManager {
pub fn new() -> Self {
Self::with_config(SubscriptionConfig::default())
}
pub fn with_config(config: SubscriptionConfig) -> Self {
Self {
subscriptions: DashMap::new(),
table_index: DashMap::new(),
connection_index: DashMap::new(),
wire_id_index: DashMap::new(),
config,
limit_exceeded_count: AtomicUsize::new(0),
result_set_exceeded_count: AtomicUsize::new(0),
subscription_count_atomic: AtomicUsize::new(0),
connection_subscription_counts: DashMap::new(),
}
}
}
impl Default for SubscriptionManager {
fn default() -> Self {
Self::new()
}
}