mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-02 18:55:32 +00:00
aquatic: don't use atomic usizes in torrent state
Doesn't make sense any more, since now a Mutex is used, not dashmap with RwLock-like functionality
This commit is contained in:
parent
ce1fc8c1b3
commit
f9428801bf
4 changed files with 17 additions and 22 deletions
1
TODO.md
1
TODO.md
|
|
@ -1,7 +1,6 @@
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
## aquatic
|
## aquatic
|
||||||
* don't use atomic usizes in torrent state, doesn't make sense anymore
|
|
||||||
* mio: set oneshot for epoll and kqueue? otherwise, stop reregistering?
|
* mio: set oneshot for epoll and kqueue? otherwise, stop reregistering?
|
||||||
* Handle Ipv4 and Ipv6 peers. Probably split torrent state. Ipv4 peers
|
* Handle Ipv4 and Ipv6 peers. Probably split torrent state. Ipv4 peers
|
||||||
can't make use of Ipv6 ones. Ipv6 ones may or may note be able to make
|
can't make use of Ipv6 ones. Ipv6 ones may or may note be able to make
|
||||||
|
|
|
||||||
|
|
@ -97,8 +97,8 @@ pub type PeerMap = IndexMap<PeerMapKey, Peer>;
|
||||||
|
|
||||||
pub struct TorrentData {
|
pub struct TorrentData {
|
||||||
pub peers: PeerMap,
|
pub peers: PeerMap,
|
||||||
pub num_seeders: AtomicUsize,
|
pub num_seeders: usize,
|
||||||
pub num_leechers: AtomicUsize,
|
pub num_leechers: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -106,8 +106,8 @@ impl Default for TorrentData {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
peers: IndexMap::new(),
|
peers: IndexMap::new(),
|
||||||
num_seeders: AtomicUsize::new(0),
|
num_seeders: 0,
|
||||||
num_leechers: AtomicUsize::new(0),
|
num_leechers: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::sync::atomic::Ordering;
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::vec::Drain;
|
use std::vec::Drain;
|
||||||
|
|
||||||
|
|
@ -233,20 +232,20 @@ pub fn handle_announce_requests(
|
||||||
|
|
||||||
match peer_status {
|
match peer_status {
|
||||||
PeerStatus::Leeching => {
|
PeerStatus::Leeching => {
|
||||||
torrent_data.num_leechers.fetch_add(1, Ordering::SeqCst);
|
torrent_data.num_leechers += 1;
|
||||||
},
|
},
|
||||||
PeerStatus::Seeding => {
|
PeerStatus::Seeding => {
|
||||||
torrent_data.num_seeders.fetch_add(1, Ordering::SeqCst);
|
torrent_data.num_seeders += 1;
|
||||||
},
|
},
|
||||||
PeerStatus::Stopped => {}
|
PeerStatus::Stopped => {}
|
||||||
};
|
};
|
||||||
|
|
||||||
match opt_removed_peer_status {
|
match opt_removed_peer_status {
|
||||||
Some(PeerStatus::Leeching) => {
|
Some(PeerStatus::Leeching) => {
|
||||||
torrent_data.num_leechers.fetch_sub(1, Ordering::SeqCst);
|
torrent_data.num_leechers -= 1;
|
||||||
},
|
},
|
||||||
Some(PeerStatus::Seeding) => {
|
Some(PeerStatus::Seeding) => {
|
||||||
torrent_data.num_seeders.fetch_sub(1, Ordering::SeqCst);
|
torrent_data.num_seeders -= 1;
|
||||||
},
|
},
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
@ -260,8 +259,8 @@ pub fn handle_announce_requests(
|
||||||
let response = Response::Announce(AnnounceResponse {
|
let response = Response::Announce(AnnounceResponse {
|
||||||
transaction_id: request.transaction_id,
|
transaction_id: request.transaction_id,
|
||||||
announce_interval: AnnounceInterval(config.network.peer_announce_interval),
|
announce_interval: AnnounceInterval(config.network.peer_announce_interval),
|
||||||
leechers: NumberOfPeers(torrent_data.num_leechers.load(Ordering::SeqCst) as i32),
|
leechers: NumberOfPeers(torrent_data.num_leechers as i32),
|
||||||
seeders: NumberOfPeers(torrent_data.num_seeders.load(Ordering::SeqCst) as i32),
|
seeders: NumberOfPeers(torrent_data.num_seeders as i32),
|
||||||
peers: response_peers
|
peers: response_peers
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -286,8 +285,8 @@ pub fn handle_scrape_requests(
|
||||||
for info_hash in request.info_hashes.iter() {
|
for info_hash in request.info_hashes.iter() {
|
||||||
if let Some(torrent_data) = torrents.get(info_hash){
|
if let Some(torrent_data) = torrents.get(info_hash){
|
||||||
stats.push(create_torrent_scrape_statistics(
|
stats.push(create_torrent_scrape_statistics(
|
||||||
torrent_data.num_seeders.load(Ordering::SeqCst) as i32,
|
torrent_data.num_seeders as i32,
|
||||||
torrent_data.num_leechers.load(Ordering::SeqCst) as i32,
|
torrent_data.num_leechers as i32,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
stats.push(empty_stats);
|
stats.push(empty_stats);
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ pub fn clean_connections_and_torrents(state: &State){
|
||||||
let mut torrents = state.torrents.lock();
|
let mut torrents = state.torrents.lock();
|
||||||
|
|
||||||
torrents.retain(|_, torrent| {
|
torrents.retain(|_, torrent| {
|
||||||
let num_seeders = &torrent.num_seeders;
|
let num_seeders = &mut torrent.num_seeders;
|
||||||
let num_leechers = &torrent.num_leechers;
|
let num_leechers = &mut torrent.num_leechers;
|
||||||
|
|
||||||
torrent.peers.retain(|_, peer| {
|
torrent.peers.retain(|_, peer| {
|
||||||
let keep = peer.valid_until.0 > now;
|
let keep = peer.valid_until.0 > now;
|
||||||
|
|
@ -29,10 +29,10 @@ pub fn clean_connections_and_torrents(state: &State){
|
||||||
if !keep {
|
if !keep {
|
||||||
match peer.status {
|
match peer.status {
|
||||||
PeerStatus::Seeding => {
|
PeerStatus::Seeding => {
|
||||||
num_seeders.fetch_sub(1, Ordering::SeqCst);
|
*num_seeders -= 1;
|
||||||
},
|
},
|
||||||
PeerStatus::Leeching => {
|
PeerStatus::Leeching => {
|
||||||
num_leechers.fetch_sub(1, Ordering::SeqCst);
|
*num_leechers -= 1;
|
||||||
},
|
},
|
||||||
_ => (),
|
_ => (),
|
||||||
};
|
};
|
||||||
|
|
@ -94,10 +94,7 @@ pub fn gather_and_print_statistics(
|
||||||
let torrents = &mut state.torrents.lock();
|
let torrents = &mut state.torrents.lock();
|
||||||
|
|
||||||
for torrent in torrents.values(){
|
for torrent in torrents.values(){
|
||||||
let num_seeders = torrent.num_seeders.load(Ordering::SeqCst);
|
let num_peers = (torrent.num_seeders + torrent.num_leechers) as u64;
|
||||||
let num_leechers = torrent.num_leechers.load(Ordering::SeqCst);
|
|
||||||
|
|
||||||
let num_peers = (num_seeders + num_leechers) as u64;
|
|
||||||
|
|
||||||
if let Err(err) = peers_per_torrent.increment(num_peers){
|
if let Err(err) = peers_per_torrent.increment(num_peers){
|
||||||
eprintln!("error incrementing peers_per_torrent histogram: {}", err)
|
eprintln!("error incrementing peers_per_torrent histogram: {}", err)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue