[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet
From: |
mldonkey-commits |
Subject: |
[Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml |
Date: |
Sun, 17 Jul 2005 19:18:24 -0400 |
Index: mldonkey/src/networks/donkey/donkeyOvernet.ml
diff -u mldonkey/src/networks/donkey/donkeyOvernet.ml:1.35
mldonkey/src/networks/donkey/donkeyOvernet.ml:1.36
--- mldonkey/src/networks/donkey/donkeyOvernet.ml:1.35 Sun Jul 17 16:12:59 2005
+++ mldonkey/src/networks/donkey/donkeyOvernet.ml Sun Jul 17 23:18:21 2005
@@ -412,6 +412,7 @@
*********************************************************************)
let connected_peers = ref 0
+let pre_connected_peers = ref 0
module LimitedList = struct
@@ -438,7 +439,7 @@
begin
Hashtbl.add t.objects_table key key;
Fifo.put t.objects_fifo key;
- if Fifo.length t.objects_fifo = t.max_objects then
+ if Fifo.length t.objects_fifo > t.max_objects then
let key = Fifo.take t.objects_fifo in
Hashtbl.remove t.objects_table key
end
@@ -689,7 +690,12 @@
let bootstrap ip port =
if !!overnet_update_nodes && Ip.valid ip && Ip.reachable ip && port <> 0
then begin
LimitedList.add !!boot_peers (ip,port);
- boot_peers_copy := (ip,port) :: !boot_peers_copy
+ boot_peers_copy := (ip,port) :: !boot_peers_copy;
+(* Limit boot_peers_copy, if needed by the timer it will be set to
+ LimitedList.to_list !!boot_peers there *)
+ if (List.length !boot_peers_copy) > (2 * LimitedList.length !!boot_peers)
+ then
+ boot_peers_copy := (ip,port) :: [];
end
let new_peer p =
@@ -703,8 +709,6 @@
pp.peer_last_recv <- p.peer_last_recv;
pp
with _ ->
-(* Add the peer to the table of known peers *)
- Hashtbl.add known_peers key p;
(* First, enter the peer in the boot_peers to be able to use at next
restart. *)
bootstrap p.peer_ip p.peer_port;
@@ -714,15 +718,29 @@
if bucket < !n_used_buckets then begin
if Fifo.length prebuckets.(bucket) = max_peers_per_prebucket then
+ begin
+ let l = last_time () - 1800 in
let pp = Fifo.take prebuckets.(bucket) in
Fifo.put prebuckets.(bucket)
(* If we heard of the head of the bucket in the last 30 minutes, we should
keep it. *)
- (if pp.peer_last_recv > last_time () - 1800 then pp else p)
- else
- Fifo.put prebuckets.(bucket) p
- end else
- if !n_used_buckets < 128 then begin
+ (if pp.peer_last_recv > l then pp else p);
+ if pp.peer_last_recv <= l then
+ begin
+(* Add the peer to the table of known peers *)
+ Hashtbl.add known_peers key p;
+(* And remove pp *)
+ let ppkey = (pp.peer_ip, pp.peer_port) in
+ Hashtbl.remove known_peers ppkey
+ end
+ end
+ else begin
+ Hashtbl.add known_peers key p;
+ Fifo.put prebuckets.(bucket) p;
+ incr pre_connected_peers
+ end
+ end
+ else if !n_used_buckets < 128 then begin
Fifo.put prebuckets.(!n_used_buckets) p;
while !n_used_buckets < 128 &&
@@ -737,7 +755,7 @@
prebuckets.(!n_used_buckets) else b) p
done
done
- end;
+ end;
p
else
p
@@ -1101,7 +1119,12 @@
for j = 1 to Fifo.length b do
let p = Fifo.take b in
if p.peer_last_recv > overtime then Fifo.put b p else
+ begin
+ (* remove the peer also from known_peers *)
+ let key = (p.peer_ip, p.peer_port) in
+ Hashtbl.remove known_peers key;
decr connected_peers
+ end
done
done;
@@ -1121,6 +1144,7 @@
if p.peer_last_recv > overtime then begin
Fifo.put b p;
incr connected_peers;
+ decr pre_connected_peers;
if Fifo.length b = max_peers_per_bucket then raise Exit
end else Fifo.put pb p
@@ -1252,10 +1276,22 @@
with Exit -> ()
end;
+(* reset the Hashtbls and Fifos for searches that are older than 5 minutes *)
+ let l = last_time () - 300 in
+ List.iter ( fun s ->
+ if s.search_requests < max_search_requests &&
+ s.search_start > l then begin
+ Hashtbl.clear s.search_known_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_waiting_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_asked_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_ok_peers;
+ Hashtbl.clear s.search_results;
+ end
+ ) !overnet_searches;
(* remove searches that are older than 5 minutes *)
overnet_searches := List.filter (fun s ->
s.search_requests < max_search_requests &&
- s.search_start > last_time () - 300
+ s.search_start > l
) !overnet_searches;
);
@@ -1284,6 +1320,12 @@
check_current_downloads ();
end
);
+ add_infinite_timer 1800. (fun _ ->
+ if !!enable_overnet then begin
+ PublishedKeywords.refresh ();
+ PublishedFiles.refresh ();
+ end
+ );
end
@@ -1492,8 +1534,8 @@
"buckets", Arg_none (fun o ->
let buf = o.conn_buf in
update_buckets ();
- Printf.bprintf buf "Number of used buckets %d with %d peers\n"
- !n_used_buckets !connected_peers;
+ Printf.bprintf buf "Number of used buckets %d with %d peers
(prebucket: %d peers)\n"
+ !n_used_buckets !connected_peers !pre_connected_peers;
for i = 0 to !n_used_buckets do
if Fifo.length buckets.(i) > 0 ||
Fifo.length prebuckets.(i) > 0 then
@@ -1529,10 +1571,26 @@
ws
let forget_search ss =
+ begin
+(* reset the Hashtbls and Fifos *)
+ List.iter ( fun s ->
+ match s.search_kind with
+ KeywordSearch sss when ss == sss ->
+ begin
+ Hashtbl.clear s.search_known_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_waiting_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_asked_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_ok_peers;
+ Hashtbl.clear s.search_results;
+ end
+ | _ -> ()
+ ) !overnet_searches;
+(* Remove from overnet_searches *)
overnet_searches := List.filter (fun s ->
match s.search_kind with
KeywordSearch sss when ss == sss -> false
| _ -> true) !overnet_searches
+ end
let _ =
CommonWeb.add_redirector_info Proto.redirector_section (fun buf ->
@@ -1548,10 +1606,26 @@
)
let cancel_recover_file file =
- overnet_searches := List.filter (fun s ->
+ begin
+(* reset the Hashtbls and Fifos *)
+ List.iter ( fun s ->
+ match s.search_kind with
+ FileSearch f when f == file ->
+ begin
+ Hashtbl.clear s.search_known_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_waiting_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_asked_peers;
+ Array.iter (fun a -> Fifo.clear a) s.search_ok_peers;
+ Hashtbl.clear s.search_results;
+ end
+ | _ -> ()
+ ) !overnet_searches;
+(* Remove from overnet_searches *)
+ overnet_searches := List.filter (fun s ->
match s.search_kind with
FileSearch f when f == file -> false
| _ -> true) !overnet_searches
+ end
let _ =
CommonWeb.add_web_kind web_info (fun _ filename ->
@@ -1606,7 +1680,9 @@
(if Proto.redirector_section = "DKKO" then "Overnet" else "Kademlia");
Printf.bprintf buf " boot_peers: %d\n" (LimitedList.length
!!boot_peers);
update_buckets ();
- Printf.bprintf buf "%d buckets with %d peers\n" !n_used_buckets
!connected_peers;
+ Printf.bprintf buf " %d buckets with %d peers and %d prebucket peers\n"
+ !n_used_buckets !connected_peers !pre_connected_peers;
+
Printf.bprintf buf " Search hits: %d\n" !search_hits;
Printf.bprintf buf " Source hits: %d\n" !source_hits;
Printf.bprintf buf " Hashtbl.lenght known_peers: %d\n" (Hashtbl.length
known_peers);
@@ -1618,16 +1694,16 @@
let n_overnet_searches = ref 0 in
List.iter ( fun s ->
for i = 128 downto 0 do
- let n_search_known_peers =
- !n_search_known_peers + (Hashtbl.length s.search_known_peers)
in
- let n_search_waiting_peers =
- !n_search_waiting_peers + (Fifo.length
s.search_waiting_peers.(i)) in
- let n_search_asked_peers =
- !n_search_asked_peers + (Fifo.length
s.search_asked_peers.(i)) in
- let n_search_ok_peers =
- !n_search_ok_peers + (Fifo.length s.search_ok_peers.(i)) in
- let n_search_results =
- !n_search_results + (Hashtbl.length s.search_results) in ()
+ n_search_known_peers :=
+ !n_search_known_peers + (Hashtbl.length s.search_known_peers);
+ n_search_waiting_peers :=
+ !n_search_waiting_peers + (Fifo.length
s.search_waiting_peers.(i));
+ n_search_asked_peers :=
+ !n_search_asked_peers + (Fifo.length
s.search_asked_peers.(i));
+ n_search_ok_peers :=
+ !n_search_ok_peers + (Fifo.length s.search_ok_peers.(i));
+ n_search_results :=
+ !n_search_results + (Hashtbl.length s.search_results);
done;
incr n_overnet_searches
) !overnet_searches;
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/06
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/06
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/10
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/14
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/17
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml,
mldonkey-commits <=
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/17
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/20
- [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml, mldonkey-commits, 2005/07/22