mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
Use (unbounded) SegQueue instead of ArrayQueue
This commit is contained in:
parent
6503e89375
commit
f37ba1e52e
7 changed files with 17 additions and 37 deletions
|
|
@ -3,14 +3,12 @@ use std::sync::atomic::AtomicUsize;
|
|||
use std::net::{SocketAddr, IpAddr};
|
||||
use std::time::Instant;
|
||||
|
||||
use crossbeam_queue::ArrayQueue;
|
||||
use crossbeam_queue::SegQueue;
|
||||
use dashmap::DashMap;
|
||||
use indexmap::IndexMap;
|
||||
|
||||
pub use bittorrent_udp::types::*;
|
||||
|
||||
use crate::config::Config;
|
||||
|
||||
|
||||
pub const MAX_PACKET_SIZE: usize = 4096;
|
||||
|
||||
|
|
@ -140,18 +138,18 @@ pub struct State {
|
|||
pub connections: Arc<ConnectionMap>,
|
||||
pub torrents: Arc<TorrentMap>,
|
||||
pub statistics: Arc<Statistics>,
|
||||
pub request_queue: Arc<ArrayQueue<(Request, SocketAddr)>>,
|
||||
pub response_queue: Arc<ArrayQueue<(Response, SocketAddr)>>,
|
||||
pub request_queue: Arc<SegQueue<(Request, SocketAddr)>>,
|
||||
pub response_queue: Arc<SegQueue<(Response, SocketAddr)>>,
|
||||
}
|
||||
|
||||
impl State {
|
||||
pub fn new(config: &Config) -> Self {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
connections: Arc::new(DashMap::new()),
|
||||
torrents: Arc::new(DashMap::new()),
|
||||
statistics: Arc::new(Statistics::default()),
|
||||
request_queue: Arc::new(ArrayQueue::new(config.request_queue_len)),
|
||||
response_queue: Arc::new(ArrayQueue::new(config.response_queue_len)),
|
||||
request_queue: Arc::new(SegQueue::new()),
|
||||
response_queue: Arc::new(SegQueue::new()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@ pub struct Config {
|
|||
/// Spawn this number of threads for workers
|
||||
pub socket_workers: usize,
|
||||
pub response_workers: usize,
|
||||
pub request_queue_len: usize,
|
||||
pub response_queue_len: usize,
|
||||
pub network: NetworkConfig,
|
||||
pub statistics: StatisticsConfig,
|
||||
pub cleaning: CleaningConfig,
|
||||
|
|
@ -55,8 +53,6 @@ impl Default for Config {
|
|||
Self {
|
||||
socket_workers: 1,
|
||||
response_workers: 1,
|
||||
request_queue_len: 4096,
|
||||
response_queue_len: 4096 * 4,
|
||||
network: NetworkConfig::default(),
|
||||
statistics: StatisticsConfig::default(),
|
||||
cleaning: CleaningConfig::default(),
|
||||
|
|
|
|||
|
|
@ -88,9 +88,7 @@ pub fn handle_connect_requests(
|
|||
}
|
||||
);
|
||||
|
||||
if let Err(err) = state.response_queue.push((response, src)){
|
||||
eprintln!("couldn't push to response queue: {}", err);
|
||||
}
|
||||
state.response_queue.push((response, src));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -114,9 +112,7 @@ pub fn handle_announce_requests(
|
|||
message: "Connection invalid or expired".to_string()
|
||||
};
|
||||
|
||||
if let Err(err) = state.response_queue.push((response.into(), src)){
|
||||
eprintln!("couldn't push to response queue: {}", err);
|
||||
}
|
||||
state.response_queue.push((response.into(), src));
|
||||
}
|
||||
|
||||
let peer_key = PeerMapKey {
|
||||
|
|
@ -180,9 +176,7 @@ pub fn handle_announce_requests(
|
|||
peers: response_peers
|
||||
});
|
||||
|
||||
if let Err(err) = state.response_queue.push((response, src)){
|
||||
eprintln!("couldn't push to response queue: {}", err);
|
||||
}
|
||||
state.response_queue.push((response, src));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -206,9 +200,7 @@ pub fn handle_scrape_requests(
|
|||
message: "Connection invalid or expired".to_string()
|
||||
};
|
||||
|
||||
if let Err(err) = state.response_queue.push((response.into(), src)){
|
||||
eprintln!("couldn't push to response queue: {}", err);
|
||||
}
|
||||
state.response_queue.push((response.into(), src));
|
||||
}
|
||||
|
||||
let mut stats: Vec<TorrentScrapeStatistics> = Vec::with_capacity(
|
||||
|
|
@ -231,9 +223,7 @@ pub fn handle_scrape_requests(
|
|||
torrent_stats: stats,
|
||||
});
|
||||
|
||||
if let Err(err) = state.response_queue.push((response, src)){
|
||||
eprintln!("couldn't push to response queue: {}", err);
|
||||
}
|
||||
state.response_queue.push((response, src));
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use common::State;
|
|||
|
||||
|
||||
pub fn run(config: Config){
|
||||
let state = State::new(&config);
|
||||
let state = State::new();
|
||||
|
||||
for _ in 0..config.response_workers {
|
||||
let state = state.clone();
|
||||
|
|
|
|||
|
|
@ -127,11 +127,7 @@ fn read_requests(
|
|||
|
||||
match request {
|
||||
Ok(request) => {
|
||||
let res = state.request_queue.push((request, src));
|
||||
|
||||
if let Err(err) = res {
|
||||
eprintln!("couldn't push request to queue: {}", err);
|
||||
}
|
||||
state.request_queue.push((request, src));
|
||||
},
|
||||
Err(err) => {
|
||||
eprintln!("request_from_bytes error: {:?}", err);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue