Re: DHT expiration questions
[email protected] Wed, 20 Aug 2008 19:53:01 +0000 (UTC)
| Newsgroups | gmane.network.gnutella.devel |
|---|---|
| Organization | Home, Grenoble, France |
| Message-ID | <[email protected]> |
Quoting pwang708 <[email protected]> from ml.gnutella.dev-forum: :A stale data item should not be permanently carried, unless some node :keeps republishing it. Then it is not stale. :-) Unfortunately. However, replicating (i.e. keeping alive) a dead alt-loc (i.e. the creator is long gone or has changed IP address) is going to use precious slots in the DHT keys: remember there are only 16 possible slots at each node. I believe the algorithm I have presented in my message is the best possible under the circumstances. Locally assigning a creation time at each node is the same as we have today with the download mesh. And it results in stale addresses being propagated forever in the mesh. :The default republish time is 30 minutes. The republish time could be :smaller if the DHTvalue was published to less than 20 node last time. : :(locationCount * DatabaseSettings.VALUE_REPUBLISH_INTERVAL.getValue()) : / KademliaSettings.REPLICATION_PARAMETER.getValue()); I don't understand what the above computes, but in any case, republishing every 30 minutes is INSANE! Do you realize the amount of traffic this generate in the network? You have to perform a node lookup for the key, resulting in 20 RPCs at least, store the value using another batch of 20 RPCs, and then repeat that every 30 minutes for every value you wish to publish? Just plain INSANE. Please fix this ASAP in all LimeWire nodes or you're going to cause too much DHT traffic. Publishing PROX values every 2 hours is OK because you have at most 3 such proxies. Publishing ALOC every 12 hours is also OK. These are the settings GTKG is going to use. Publishing something every 30 minutes is INSANE. Of course, you have to set expiration intervals accordingly. To avoid race conditions, they must be greater than republishing intervals. That's why GTKG will use 13 hours for ALOC and 3 for PROX. My node is already sending out 8 MiB of DHT traffic per hour just to reply to FIND_VALUE, FIND_NODE and STORE requests. (I do not publish nor replicate yet, because I wanted to think about what I would do first) That amounts to 2,27 KiB/s of outgoing UDP traffic that is just not available for uploading. I bet the frequent publishing is the cause of much of that traffic. Just like frequent requerying melted Gnutella in the old days, frequent republishing is going to kill the DHT. Offhand, LimeWire needs to understand the STORE_SC_FULL and its cousin STORE_SC_FULL_LOADED return codes. I had recently a store EMA load of 32.45! Yes, that's right, a sustained average of 32+ STORE requests per minute for a key, storing ALOC. This shows the algorithm to determine whether something is "rare" is faulty without getting feedback from the DHT. Here, if you handle the errors correctly, the publishing nodes will stop thinking their value is rare and will republish less often. The correction must be random, so as to not go to the other extreme where nobody would republish anymore, leading to a missing key. Also hysteresis is required to avoid jumping in and out for no reason. :As far as I understand, only the root node (whose ID is the closest to :the key) forwards data to new replica roots (whose ID is among the 20 :closet ones). So a new node joining the neighborhood becomes the root, :then the data will expire later what one hour. So there is a chance :that data being replicated over and over. Under the scheme I'm going to implement in GTKG, only nodes who have been seeing a STORE from the creator (hence holding an "original" value as opposed to a "copy") will replicate the data to peers. A peer getting a "copy" will store it but NEVER replicate it. This should keep the replication traffic to a reasonable level, as well as avoid forever-living dead ALOC and PROX. Naturely, if one of the peers in the k-ball replicates first, GTKG will not re-replicate before the next hour. Raphael