Class IterativeSearchJob
java.lang.Object
net.i2p.router.JobImpl
net.i2p.router.networkdb.kademlia.FloodSearchJob
net.i2p.router.networkdb.kademlia.IterativeSearchJob
- All Implemented Interfaces:
Job
public class IterativeSearchJob extends FloodSearchJob
A traditional Kademlia search that continues to search
when the initial lookup fails, by iteratively searching the
closer-to-the-key peers returned by the query in a DSRM.
Unlike traditional Kad, it doesn't stop when there are no
closer keys, it keeps going until the timeout or max number
of searches is reached.
Differences from FloodOnlySearchJob:
Chases peers in DSRM's immediately.
FOSJ searches the two closest in parallel and then stops.
There is no per-search timeout, only a total timeout.
Here, we search one at a time, and must have a separate per-search timeout.
Advantages: Much more robust than FOSJ, especially in a large network
where not all floodfills are known. Longer total timeout.
Halves search traffic for successful searches, as this doesn't do
two searches in parallel like FOSJ does.
Public only for JobQueue, not a public API, not for external use.
- Since:
- 0.8.9
-
Field Summary
Fields Modifier and Type Field Description static boolean
DEFAULT_ENCRYPT_RI
only on fast boxes, for nowstatic String
PROP_ENCRYPT_RI
Fields inherited from class net.i2p.router.networkdb.kademlia.FloodSearchJob
_created, _dead, _expiration, _facade, _isLease, _key, _log, _lookupsRemaining, _onFailed, _onFind, _success, _timeoutMs, CONCURRENT_SEARCHES
-
Constructor Summary
Constructors Constructor Description IterativeSearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease)
Lookup using exploratory tunnelsIterativeSearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease, Hash fromLocalDest)
Lookup using the client's tunnels. -
Method Summary
Modifier and Type Method Description void
dropped()
Dropped by the job queue(package private) void
failed()
Total failure(package private) void
failed(Hash peer, boolean timedOut)
Note that the peer did not respond with a DSM (either a DSRM, timeout, or failure).Hash
getFromHash()
Hash of the dest this query is fromString
getName()
Deprecated, unused, see FOSJ override(package private) void
newPeerToTry(Hash peer)
A new (floodfill) peer was discovered that may have the answer.void
runJob()
Deprecated, unused, see FOSJ override(package private) void
success()
Deprecated, unused, see FOSJ override(package private) long
timeSent(Hash peer)
When did we send the query to the peer?boolean
wasQueried(Hash peer)
Did we send a request to this peer?Methods inherited from class net.i2p.router.networkdb.kademlia.FloodSearchJob
addDeferred, decrementRemaining, getCreated, getExpiration, getKey, getLookupsRemaining
Methods inherited from class net.i2p.router.JobImpl
getAddedBy, getContext, getJobId, getMadeReadyOn, getTiming, madeReady, requeue, toString
-
Field Details
-
PROP_ENCRYPT_RI
- See Also:
- Constant Field Values
-
DEFAULT_ENCRYPT_RI
public static final boolean DEFAULT_ENCRYPT_RIonly on fast boxes, for now
-
-
Constructor Details
-
IterativeSearchJob
public IterativeSearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease)Lookup using exploratory tunnels -
IterativeSearchJob
public IterativeSearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease, Hash fromLocalDest)Lookup using the client's tunnels. Do not use for RI lookups down client tunnels, as the response will be dropped in InboundMessageDistributor.- Parameters:
fromLocalDest
- use these tunnels for the lookup, or null for exploratory- Since:
- 0.9.10
-
-
Method Details
-
runJob
public void runJob()Description copied from class:FloodSearchJob
Deprecated, unused, see FOSJ override- Specified by:
runJob
in interfaceJob
- Overrides:
runJob
in classFloodSearchJob
-
getName
Description copied from class:FloodSearchJob
Deprecated, unused, see FOSJ override- Specified by:
getName
in interfaceJob
- Overrides:
getName
in classFloodSearchJob
-
failed
Note that the peer did not respond with a DSM (either a DSRM, timeout, or failure). This is not necessarily a total failure of the search.- Parameters:
timedOut
- if true, will blame the peer's profile
-
newPeerToTry
A new (floodfill) peer was discovered that may have the answer.- Parameters:
peer
- may not actually be new
-
getFromHash
Hash of the dest this query is from- Returns:
- null for router
- Since:
- 0.9.13
-
wasQueried
Did we send a request to this peer?- Since:
- 0.9.13
-
timeSent
When did we send the query to the peer?- Returns:
- context time, or -1 if never sent
-
dropped
public void dropped()Dropped by the job queue -
failed
void failed()Total failure- Overrides:
failed
in classFloodSearchJob
-
success
void success()Description copied from class:FloodSearchJob
Deprecated, unused, see FOSJ override- Overrides:
success
in classFloodSearchJob
-