diff options
author | erdgeist <> | 2007-10-27 14:06:07 +0000 |
---|---|---|
committer | erdgeist <> | 2007-10-27 14:06:07 +0000 |
commit | b19bbd6a850ecd51180dfea6e025a032fb2f1fe1 (patch) | |
tree | 84b17f4b10344fcb7addf653c8fdc10a4980fdb5 /trackerlogic.h | |
parent | 72c72bb3a18655925b6a6d3d1df5af3600da3b58 (diff) |
Number of buckets is 1024 now
Clean all torrents now only cleans one bucket at a time
All torrents that are being worked upon in an announce are being cleaned on demoand
torrent's peer lists now keep extra counts for seeds and peers to speed up scrape and announce
Sync has gone for now. I will think up a new way to implement. The old one was way to slow.
Diffstat (limited to 'trackerlogic.h')
-rw-r--r-- | trackerlogic.h | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/trackerlogic.h b/trackerlogic.h index 96b59f3..fd8f48a 100644 --- a/trackerlogic.h +++ b/trackerlogic.h | |||
@@ -20,6 +20,16 @@ typedef ot_byte ot_hash[20]; | |||
20 | typedef ot_dword ot_ip; | 20 | typedef ot_dword ot_ip; |
21 | typedef time_t ot_time; | 21 | typedef time_t ot_time; |
22 | 22 | ||
23 | #define OT_VECTOR_MIN_MEMBERS 4 | ||
24 | #define OT_VECTOR_GROW_RATIO 8 | ||
25 | #define OT_VECTOR_SHRINK_THRESH 6 | ||
26 | #define OT_VECTOR_SHRINK_RATIO 4 | ||
27 | typedef struct { | ||
28 | void *data; | ||
29 | size_t size; | ||
30 | size_t space; | ||
31 | } ot_vector; | ||
32 | |||
23 | /* Some tracker behaviour tunable */ | 33 | /* Some tracker behaviour tunable */ |
24 | #define OT_CLIENT_TIMEOUT 30 | 34 | #define OT_CLIENT_TIMEOUT 30 |
25 | #define OT_CLIENT_TIMEOUT_CHECKINTERVAL 10 | 35 | #define OT_CLIENT_TIMEOUT_CHECKINTERVAL 10 |
@@ -32,8 +42,13 @@ typedef time_t ot_time; | |||
32 | 42 | ||
33 | #define OT_CLIENT_REQUEST_INTERVAL_RANDOM ( OT_CLIENT_REQUEST_INTERVAL - OT_CLIENT_REQUEST_VARIATION/2 + (int)( random( ) % OT_CLIENT_REQUEST_VARIATION ) ) | 43 | #define OT_CLIENT_REQUEST_INTERVAL_RANDOM ( OT_CLIENT_REQUEST_INTERVAL - OT_CLIENT_REQUEST_VARIATION/2 + (int)( random( ) % OT_CLIENT_REQUEST_VARIATION ) ) |
34 | 44 | ||
35 | /* We maintain a list of 256 pointers to sorted list of ot_torrent structs | 45 | /* We maintain a list of 4096 pointers to sorted list of ot_torrent structs |
36 | Sort key is, of course, its hash */ | 46 | Sort key is, of course, its hash */ |
47 | #define OT_BUCKET_COUNT 1024 | ||
48 | static inline ot_vector *hash_to_bucket( ot_vector *vectors, ot_hash *hash ) { | ||
49 | unsigned char *local_hash = hash[0]; | ||
50 | return vectors + ( ( local_hash[0] << 2 ) | ( local_hash[1] >> 6 ) ); | ||
51 | } | ||
37 | 52 | ||
38 | /* This list points to 9 pools of peers each grouped in five-minute-intervals | 53 | /* This list points to 9 pools of peers each grouped in five-minute-intervals |
39 | thus achieving a timeout of 2700s or 45 minutes | 54 | thus achieving a timeout of 2700s or 45 minutes |
@@ -45,16 +60,6 @@ typedef time_t ot_time; | |||
45 | extern time_t g_now; | 60 | extern time_t g_now; |
46 | #define NOW (g_now/OT_POOLS_TIMEOUT) | 61 | #define NOW (g_now/OT_POOLS_TIMEOUT) |
47 | 62 | ||
48 | #define OT_VECTOR_MIN_MEMBERS 4 | ||
49 | #define OT_VECTOR_GROW_RATIO 8 | ||
50 | #define OT_VECTOR_SHRINK_THRESH 6 | ||
51 | #define OT_VECTOR_SHRINK_RATIO 4 | ||
52 | typedef struct { | ||
53 | void *data; | ||
54 | size_t size; | ||
55 | size_t space; | ||
56 | } ot_vector; | ||
57 | |||
58 | typedef struct { | 63 | typedef struct { |
59 | ot_byte data[8]; | 64 | ot_byte data[8]; |
60 | } ot_peer; | 65 | } ot_peer; |
@@ -71,8 +76,10 @@ static const ot_byte PEER_FLAG_STOPPED = 0x20; | |||
71 | 76 | ||
72 | typedef struct { | 77 | typedef struct { |
73 | ot_time base; | 78 | ot_time base; |
74 | size_t seed_count[ OT_POOLS_COUNT ]; | 79 | size_t seed_count; |
75 | size_t downloaded; | 80 | size_t peer_count; |
81 | size_t down_count; | ||
82 | size_t seed_counts[ OT_POOLS_COUNT ]; | ||
76 | ot_vector peers[ OT_POOLS_COUNT ]; | 83 | ot_vector peers[ OT_POOLS_COUNT ]; |
77 | } ot_peerlist; | 84 | } ot_peerlist; |
78 | 85 | ||
@@ -100,9 +107,12 @@ size_t return_stats_for_tracker( char *reply, int mode ); | |||
100 | size_t return_stats_for_slash24s( char *reply, size_t amount, ot_dword thresh ); | 107 | size_t return_stats_for_slash24s( char *reply, size_t amount, ot_dword thresh ); |
101 | size_t return_stats_for_slash24s_old( char *reply, size_t amount, ot_dword thresh ); | 108 | size_t return_stats_for_slash24s_old( char *reply, size_t amount, ot_dword thresh ); |
102 | size_t return_memstat_for_tracker( char **reply ); | 109 | size_t return_memstat_for_tracker( char **reply ); |
110 | void clean_all_torrents( void ); | ||
111 | |||
112 | #ifdef WANT_TRACKER_SYNC | ||
103 | size_t return_changeset_for_tracker( char **reply ); | 113 | size_t return_changeset_for_tracker( char **reply ); |
104 | int add_changeset_to_tracker( ot_byte *data, size_t len ); | 114 | int add_changeset_to_tracker( ot_byte *data, size_t len ); |
105 | void clean_all_torrents( void ); | 115 | #endif |
106 | 116 | ||
107 | #if defined ( WANT_BLACKLISTING ) || defined ( WANT_CLOSED_TRACKER ) | 117 | #if defined ( WANT_BLACKLISTING ) || defined ( WANT_CLOSED_TRACKER ) |
108 | int accesslist_addentry( ot_hash *hash ); | 118 | int accesslist_addentry( ot_hash *hash ); |