b4951933a627a2d6a5b4d47e4f561401aaa4e188
[quix0rs-apt-p2p.git] / TODO
1 Consider what happens when we are the closest node.
2
3 In some of the actions it is unclear what happens when we are one of the
4 closest nodes to the target key. Do we store values that we publish
5 ourself?
6
7
8 Add all cache files to the database.
9
10 All files in the cache should be added to the database, so that they can
11 be checked to make sure nothing has happened to them. The database would
12 then need a flag to indicate files that are hashed and available, but
13 that shouldn't be added to the DHT.
14
15
16 Packages.diff files need to be considered.
17
18 The Packages.diff/Index files contain hashes of Packages.diff/rred.gz 
19 files, which themselves contain diffs to the Packages files previously 
20 downloaded. Apt will request these files for the testing/unstable 
21 distributions. They need to either be ignored, or dealt with properly by 
22 adding them to the tracking done by the AptPackages module.
23
24
25 PeerManager needs to download large files from multiple peers.
26
27 The PeerManager currently chooses a peer at random from the list of 
28 possible peers, and downloads the entire file from there. This needs to 
29 change if both a) the file is large (more than 512 KB), and b) there are
30 multiple peers with the file. The PeerManager should then break up the 
31 large file into multiple pieces of size < 512 KB, and then send requests 
32 to multiple peers for these pieces.
33
34 This can cause a problem with hash checking the returned data, as hashes 
35 for the pieces are not known. Any file that fails a hash check should be 
36 downloaded again, with each piece being downloaded from different peers 
37 than it was previously. The peers are shifted by 1, so that if a peers 
38 previously downloaded piece i, it now downloads piece i+1, and the first 
39 piece is downloaded by the previous downloader of the last piece, or 
40 preferably a previously unused peer. As each piece is downloaded the 
41 running hash of the file should be checked to determine the place at 
42 which the file differs from the previous download.
43
44 If the hash check then passes, then the peer who originally provided the 
45 bad piece can be assessed blame for the error. Otherwise, the peer who 
46 originally provided the piece is probably at fault, since he is now 
47 providing a later piece. This doesn't work if the differing piece is the 
48 first piece, in which case it is downloaded from a 3rd peer, with 
49 consensus revealing the misbehaving peer.