class SearchJob extends JobImpl
Modifier and Type | Class and Description |
---|---|
protected class |
SearchJob.FailedJob
Called when a particular peer failed to respond before the timeout was
reached, or if the peer could not be contacted at all.
|
Modifier and Type | Field and Description |
---|---|
protected KademliaNetworkDatabaseFacade |
_facade |
protected Log |
_log |
(package private) static int |
MAX_CLOSEST
only send the 10 closest "dont tell me about" refs
|
(package private) static long |
MIN_TIMEOUT |
(package private) static int |
PER_FLOODFILL_PEER_TIMEOUT
timeout
|
Constructor and Description |
---|
SearchJob(RouterContext context,
KademliaNetworkDatabaseFacade facade,
Hash key,
Job onSuccess,
Job onFailure,
long timeoutMs,
boolean keepStats,
boolean isLease)
Create a new search for the routingKey specified
|
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
add(Hash peer) |
int |
addDeferred(Job onFind,
Job onFail,
long expiration,
boolean isLease) |
protected I2NPMessage |
buildMessage(TunnelId replyTunnelId,
Hash replyGateway,
long expiration,
RouterInfo peer)
Build the database search message
|
protected void |
continueSearch()
Send a series of searches to the next available peers as selected by
the routing table, but making sure no more than SEARCH_BREDTH are outstanding
at any time
|
(package private) void |
decrementOutstandingFloodfillSearches() |
protected void |
fail()
Search totally failed
|
protected int |
getBredth()
max # of concurrent searches
|
long |
getExpiration() |
protected KademliaNetworkDatabaseFacade |
getFacade() |
String |
getName()
Descriptive name of the task
|
protected int |
getPerPeerTimeoutMs()
Let each peer take up to the average successful search RTT
|
protected int |
getPerPeerTimeoutMs(Hash peer) |
protected SearchState |
getState() |
long |
getTimeoutMs() |
protected void |
newPeersFound(int numNewPeers)
We've gotten a search reply that contained the specified
number of peers that we didn't know about before.
|
(package private) static boolean |
onlyQueryFloodfillPeers(RouterContext ctx)
this is now misnamed, as it is only used to determine whether to return floodfill peers only
|
(package private) void |
replyFound(DatabaseSearchReplyMessage message,
Hash peer)
found a reply
|
void |
runJob()
Actually perform the task.
|
protected void |
searchNext()
Send the next search, or stop if its completed
|
protected void |
sendLeaseSearch(RouterInfo router)
we're (probably) searching for a LeaseSet, so to be (overly) cautious, we're sending
the request out through a tunnel w/ reply back through another tunnel.
|
protected void |
sendRouterSearch(RouterInfo router)
we're searching for a router, so we can just send direct
|
protected void |
sendSearch(RouterInfo router)
Send a search to the given peer
|
(package private) long |
timeoutMs() |
String |
toString() |
(package private) boolean |
wasAttempted(Hash peer) |
dropped, getAddedBy, getContext, getJobId, getMadeReadyOn, getTiming, madeReady, requeue
protected final Log _log
protected final KademliaNetworkDatabaseFacade _facade
static final int MAX_CLOSEST
static final int PER_FLOODFILL_PEER_TIMEOUT
static final long MIN_TIMEOUT
public SearchJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key, Job onSuccess, Job onFailure, long timeoutMs, boolean keepStats, boolean isLease)
public void runJob()
Job
protected SearchState getState()
protected KademliaNetworkDatabaseFacade getFacade()
public long getExpiration()
public long getTimeoutMs()
static boolean onlyQueryFloodfillPeers(RouterContext ctx)
protected int getPerPeerTimeoutMs(Hash peer)
protected int getPerPeerTimeoutMs()
protected void searchNext()
protected int getBredth()
protected void continueSearch()
protected void sendSearch(RouterInfo router)
protected void sendLeaseSearch(RouterInfo router)
protected void sendRouterSearch(RouterInfo router)
protected I2NPMessage buildMessage(TunnelId replyTunnelId, Hash replyGateway, long expiration, RouterInfo peer)
replyTunnelId
- tunnel to receive replies throughreplyGateway
- gateway for the reply tunnelexpiration
- when the search should stoppeer
- unused here; see ExploreJob extensionvoid replyFound(DatabaseSearchReplyMessage message, Hash peer)
protected void newPeersFound(int numNewPeers)
protected void fail()
boolean wasAttempted(Hash peer)
long timeoutMs()
boolean add(Hash peer)
void decrementOutstandingFloodfillSearches()