package net.i2p.router.networkdb.kademlia;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
* with no warranty of any kind, either expressed or implied.
* It probably won't make your computer catch on fire, or eat
* your children, but it might. Use at your own risk.
*
*/
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import net.i2p.data.Hash;
import net.i2p.kademlia.KBucket;
import net.i2p.kademlia.KBucketSet;
import net.i2p.router.JobImpl;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
* Go through the kbuckets and generate random keys for routers in buckets not
* yet full, attempting to keep a pool of keys we can explore with (at least one
* per bucket)
*
* @deprecated unused, see comments in KNDF
*/
@Deprecated
class ExploreKeySelectorJob extends JobImpl {
private Log _log;
private KademliaNetworkDatabaseFacade _facade;
private final static long RERUN_DELAY_MS = 60*1000;
private final static long OLD_BUCKET_TIME = 15*60*1000;
public ExploreKeySelectorJob(RouterContext context, KademliaNetworkDatabaseFacade facade) {
super(context);
_log = context.logManager().getLog(ExploreKeySelectorJob.class);
_facade = facade;
}
public String getName() { return "Explore Key Selector Job"; }
public void runJob() {
if (_facade.floodfillEnabled()) {
requeue(30*RERUN_DELAY_MS);
return;
}
Collection<Hash> toExplore = selectKeysToExplore();
_log.info("Filling the explorer pool with: " + toExplore);
if (toExplore != null)
_facade.queueForExploration(toExplore);
requeue(RERUN_DELAY_MS);
}
/**
* Run through all kbuckets with too few routers and generate a random key
* for it, with a maximum number of keys limited by the exploration pool size
*
*/
private Collection<Hash> selectKeysToExplore() {
Set<Hash> alreadyQueued = _facade.getExploreKeys();
if (alreadyQueued.size() > KademliaNetworkDatabaseFacade.MAX_EXPLORE_QUEUE)
return null;
return _facade.getKBuckets().getExploreKeys(OLD_BUCKET_TIME);
}
}