Skip to content

Commit 694a702

Browse files
committed
Applying more performance improvements
1 parent e98e282 commit 694a702

19 files changed

+833
-686
lines changed

src/http/http.rs

Lines changed: 88 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -328,13 +328,34 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
328328
IpAddr::V4(_) => {
329329
if announce_unwrapped.left != 0 {
330330
let seeds = data.get_peers(
331-
torrent_entry.seeds.clone(),
331+
&torrent_entry.seeds,
332332
TorrentPeersType::IPv4,
333333
Some(ip),
334334
72
335335
);
336-
if seeds.is_some() {
337-
for (_, torrent_peer) in seeds.unwrap().iter() {
336+
for (_, torrent_peer) in seeds.iter() {
337+
let peer_pre_parse = match torrent_peer.peer_addr.ip().to_string().parse::<Ipv4Addr>() {
338+
Ok(ip) => { ip }
339+
Err(e) => {
340+
error!("[IPV4 Error] {} - {}", torrent_peer.peer_addr.ip(), e);
341+
return HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
342+
"failure reason" => ben_bytes!(e.to_string())
343+
}.encode());
344+
}
345+
};
346+
let _ = peers_list.write(&u32::from(peer_pre_parse).to_be_bytes());
347+
peers_list.write_all(&announce_unwrapped.clone().port.to_be_bytes()).unwrap();
348+
}
349+
}
350+
if peers_list.len() != 72 {
351+
let peers = data.get_peers(
352+
&torrent_entry.peers,
353+
TorrentPeersType::IPv4,
354+
Some(ip),
355+
72
356+
);
357+
for (_, torrent_peer) in peers.iter() {
358+
if peers_list.len() != 72 {
338359
let peer_pre_parse = match torrent_peer.peer_addr.ip().to_string().parse::<Ipv4Addr>() {
339360
Ok(ip) => { ip }
340361
Err(e) => {
@@ -346,34 +367,9 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
346367
};
347368
let _ = peers_list.write(&u32::from(peer_pre_parse).to_be_bytes());
348369
peers_list.write_all(&announce_unwrapped.clone().port.to_be_bytes()).unwrap();
370+
continue;
349371
}
350-
}
351-
}
352-
if peers_list.len() != 72 {
353-
let peers = data.get_peers(
354-
torrent_entry.peers.clone(),
355-
TorrentPeersType::IPv4,
356-
Some(ip),
357-
72
358-
);
359-
if peers.is_some() {
360-
for (_, torrent_peer) in peers.unwrap().iter() {
361-
if peers_list.len() != 72 {
362-
let peer_pre_parse = match torrent_peer.peer_addr.ip().to_string().parse::<Ipv4Addr>() {
363-
Ok(ip) => { ip }
364-
Err(e) => {
365-
error!("[IPV4 Error] {} - {}", torrent_peer.peer_addr.ip(), e);
366-
return HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
367-
"failure reason" => ben_bytes!(e.to_string())
368-
}.encode());
369-
}
370-
};
371-
let _ = peers_list.write(&u32::from(peer_pre_parse).to_be_bytes());
372-
peers_list.write_all(&announce_unwrapped.clone().port.to_be_bytes()).unwrap();
373-
continue;
374-
}
375-
break;
376-
}
372+
break;
377373
}
378374
}
379375
HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
@@ -388,52 +384,48 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
388384
IpAddr::V6(_) => {
389385
if announce_unwrapped.left != 0 {
390386
let seeds = data.get_peers(
391-
torrent_entry.seeds.clone(),
387+
&torrent_entry.seeds,
388+
TorrentPeersType::IPv6,
389+
Some(ip),
390+
72
391+
);
392+
for (_, torrent_peer) in seeds.iter() {
393+
let peer_pre_parse = match torrent_peer.peer_addr.ip().to_string().parse::<Ipv6Addr>() {
394+
Ok(ip) => { ip }
395+
Err(e) => {
396+
error!("[IPV6 Error] {} - {}", torrent_peer.peer_addr.ip(), e);
397+
return HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
398+
"failure reason" => ben_bytes!(e.to_string())
399+
}.encode());
400+
}
401+
};
402+
let _ = peers_list.write(&u128::from(peer_pre_parse).to_be_bytes());
403+
peers_list.write_all(&announce_unwrapped.clone().port.to_be_bytes()).unwrap();
404+
}
405+
}
406+
if peers_list.len() != 72 {
407+
let peers = data.get_peers(
408+
&torrent_entry.peers,
392409
TorrentPeersType::IPv6,
393410
Some(ip),
394411
72
395412
);
396-
if seeds.is_some() {
397-
for (_, torrent_peer) in seeds.unwrap().iter() {
413+
for (_, torrent_peer) in peers.iter() {
414+
if peers_list.len() != 72 {
398415
let peer_pre_parse = match torrent_peer.peer_addr.ip().to_string().parse::<Ipv6Addr>() {
399416
Ok(ip) => { ip }
400417
Err(e) => {
401418
error!("[IPV6 Error] {} - {}", torrent_peer.peer_addr.ip(), e);
402419
return HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
403-
"failure reason" => ben_bytes!(e.to_string())
404-
}.encode());
420+
"failure reason" => ben_bytes!(e.to_string())
421+
}.encode());
405422
}
406423
};
407424
let _ = peers_list.write(&u128::from(peer_pre_parse).to_be_bytes());
408425
peers_list.write_all(&announce_unwrapped.clone().port.to_be_bytes()).unwrap();
426+
continue;
409427
}
410-
}
411-
}
412-
if peers_list.len() != 72 {
413-
let peers = data.get_peers(
414-
torrent_entry.peers.clone(),
415-
TorrentPeersType::IPv6,
416-
Some(ip),
417-
72
418-
);
419-
if peers.is_some() {
420-
for (_, torrent_peer) in peers.unwrap().iter() {
421-
if peers_list.len() != 72 {
422-
let peer_pre_parse = match torrent_peer.peer_addr.ip().to_string().parse::<Ipv6Addr>() {
423-
Ok(ip) => { ip }
424-
Err(e) => {
425-
error!("[IPV6 Error] {} - {}", torrent_peer.peer_addr.ip(), e);
426-
return HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
427-
"failure reason" => ben_bytes!(e.to_string())
428-
}.encode());
429-
}
430-
};
431-
let _ = peers_list.write(&u128::from(peer_pre_parse).to_be_bytes());
432-
peers_list.write_all(&announce_unwrapped.clone().port.to_be_bytes()).unwrap();
433-
continue;
434-
}
435-
break;
436-
}
428+
break;
437429
}
438430
}
439431
HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
@@ -454,40 +446,36 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
454446
IpAddr::V4(_) => {
455447
if announce_unwrapped.left != 0 {
456448
let seeds = data.get_peers(
457-
torrent_entry.seeds.clone(),
449+
&torrent_entry.seeds,
458450
TorrentPeersType::IPv4,
459451
Some(ip),
460452
72
461453
);
462-
if seeds.is_some() {
463-
for (peer_id, torrent_peer) in seeds.unwrap().iter() {
464-
peers_list_mut.push(ben_map! {
465-
"peer id" => ben_bytes!(peer_id.to_string()),
466-
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
467-
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
468-
});
469-
}
454+
for (peer_id, torrent_peer) in seeds.iter() {
455+
peers_list_mut.push(ben_map! {
456+
"peer id" => ben_bytes!(peer_id.to_string()),
457+
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
458+
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
459+
});
470460
}
471461
}
472462
if peers_list_mut.len() != 72 {
473463
let peers = data.get_peers(
474-
torrent_entry.peers.clone(),
464+
&torrent_entry.peers,
475465
TorrentPeersType::IPv4,
476466
Some(ip),
477467
72
478468
);
479-
if peers.is_some() {
480-
for (peer_id, torrent_peer) in peers.unwrap().iter() {
481-
if peers_list_mut.len() != 72 {
482-
peers_list_mut.push(ben_map! {
483-
"peer id" => ben_bytes!(peer_id.to_string()),
484-
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
485-
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
486-
});
487-
continue;
488-
}
489-
break;
469+
for (peer_id, torrent_peer) in peers.iter() {
470+
if peers_list_mut.len() != 72 {
471+
peers_list_mut.push(ben_map! {
472+
"peer id" => ben_bytes!(peer_id.to_string()),
473+
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
474+
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
475+
});
476+
continue;
490477
}
478+
break;
491479
}
492480
}
493481
HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {
@@ -502,40 +490,36 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
502490
IpAddr::V6(_) => {
503491
if announce_unwrapped.left != 0 {
504492
let seeds = data.get_peers(
505-
torrent_entry.seeds.clone(),
493+
&torrent_entry.seeds,
506494
TorrentPeersType::IPv6,
507495
Some(ip),
508496
72
509497
);
510-
if seeds.is_some() {
511-
for (peer_id, torrent_peer) in seeds.unwrap().iter() {
512-
peers_list_mut.push(ben_map! {
513-
"peer id" => ben_bytes!(peer_id.to_string()),
514-
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
515-
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
516-
});
517-
}
498+
for (peer_id, torrent_peer) in seeds.iter() {
499+
peers_list_mut.push(ben_map! {
500+
"peer id" => ben_bytes!(peer_id.to_string()),
501+
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
502+
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
503+
});
518504
}
519505
}
520506
if peers_list_mut.len() != 72 {
521507
let peers = data.get_peers(
522-
torrent_entry.peers.clone(),
508+
&torrent_entry.peers,
523509
TorrentPeersType::IPv6,
524510
Some(ip),
525511
72
526512
);
527-
if peers.is_some() {
528-
for (peer_id, torrent_peer) in peers.unwrap().iter() {
529-
if peers_list_mut.len() != 72 {
530-
peers_list_mut.push(ben_map! {
531-
"peer id" => ben_bytes!(peer_id.to_string()),
532-
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
533-
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
534-
});
535-
continue;
536-
}
537-
break;
513+
for (peer_id, torrent_peer) in peers.iter() {
514+
if peers_list_mut.len() != 72 {
515+
peers_list_mut.push(ben_map! {
516+
"peer id" => ben_bytes!(peer_id.to_string()),
517+
"ip" => ben_bytes!(torrent_peer.peer_addr.ip().to_string()),
518+
"port" => ben_int!(torrent_peer.peer_addr.port() as i64)
519+
});
520+
continue;
538521
}
522+
break;
539523
}
540524
}
541525
HttpResponse::Ok().content_type(ContentType::plaintext()).body(ben_map! {

src/tracker/impls.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ pub mod torrent_tracker_torrents_whitelist;
1313
pub mod torrent_tracker_users;
1414
pub mod torrent_tracker_users_updates;
1515
pub mod user_id;
16-
pub mod user_id_visitor;
1716
pub mod announce_event;
1817
pub mod torrent_sharding;
1918
pub mod torrent_tracker_import;

src/tracker/impls/announce_event.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::tracker::enums::announce_event::AnnounceEvent;
22

33
impl AnnounceEvent {
44
#[inline]
5-
pub fn from_i32(i: i32) -> Self {
5+
pub const fn from_i32(i: i32) -> Self {
66
match i {
77
1 => Self::Completed,
88
2 => Self::Started,
@@ -12,7 +12,7 @@ impl AnnounceEvent {
1212
}
1313

1414
#[inline]
15-
pub fn to_i32(&self) -> i32 {
15+
pub const fn to_i32(self) -> i32 {
1616
match self {
1717
AnnounceEvent::None => 0,
1818
AnnounceEvent::Completed => 1,

src/tracker/impls/torrent_sharding.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ impl TorrentSharding {
162162
}
163163

164164
pub fn get_multiple_torrents(&self, info_hashes: &[InfoHash]) -> BTreeMap<InfoHash, Option<TorrentEntry>> {
165-
// Group by shard to minimize lock acquisitions
166165
let mut shard_groups: BTreeMap<u8, Vec<InfoHash>> = BTreeMap::new();
167166
for &info_hash in info_hashes {
168167
shard_groups.entry(info_hash.0[0]).or_default().push(info_hash);

0 commit comments

Comments
 (0)