Class SearchJob

java.lang.Object
net.i2p.router.JobImpl
net.i2p.router.networkdb.kademlia.SearchJob
All Implemented Interfaces:
Job
Direct Known Subclasses:
ExploreJob

class SearchJob extends JobImpl
Search for a particular key iteratively until we either find a value or we run out of peers Note that this is rarely if ever used directly, and is primary used by the ExploreJob extension. FloodOnlySearchJob and FloodSearchJob do not extend this. It also does not update peer profile stats.
  • Field Details

  • Constructor Details

  • Method Details

    • runJob

      public void runJob()
      Description copied from interface: Job
      Actually perform the task. This call blocks until the Job is complete.
    • getState

      protected SearchState getState()
    • getFacade

      protected KademliaNetworkDatabaseFacade getFacade()
    • getExpiration

      public long getExpiration()
    • getTimeoutMs

      public long getTimeoutMs()
    • onlyQueryFloodfillPeers

      static boolean onlyQueryFloodfillPeers(RouterContext ctx)
      this is now misnamed, as it is only used to determine whether to return floodfill peers only
    • getPerPeerTimeoutMs

      protected int getPerPeerTimeoutMs(Hash peer)
    • getPerPeerTimeoutMs

      protected int getPerPeerTimeoutMs()
      Let each peer take up to the average successful search RTT
    • searchNext

      protected void searchNext()
      Send the next search, or stop if its completed
    • getBredth

      protected int getBredth()
      max # of concurrent searches
    • continueSearch

      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
    • sendSearch

      protected void sendSearch(RouterInfo router)
      Send a search to the given peer
    • sendLeaseSearch

      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.
    • sendRouterSearch

      protected void sendRouterSearch(RouterInfo router)
      we're searching for a router, so we can just send direct
    • buildMessage

      protected I2NPMessage buildMessage(TunnelId replyTunnelId, Hash replyGateway, long expiration, RouterInfo peer)
      Build the database search message
      Parameters:
      replyTunnelId - tunnel to receive replies through
      replyGateway - gateway for the reply tunnel
      expiration - when the search should stop
      peer - unused here; see ExploreJob extension
      Returns:
      a DatabaseLookupMessage
    • replyFound

      void replyFound(DatabaseSearchReplyMessage message, Hash peer)
      found a reply
    • newPeersFound

      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.
    • fail

      protected void fail()
      Search totally failed
    • addDeferred

      public int addDeferred(Job onFind, Job onFail, long expiration, boolean isLease)
    • getName

      public String getName()
      Description copied from interface: Job
      Descriptive name of the task
    • toString

      public String toString()
      Overrides:
      toString in class JobImpl
    • wasAttempted

      boolean wasAttempted(Hash peer)
    • timeoutMs

      long timeoutMs()
    • add

      boolean add(Hash peer)
      Returns:
      true if peer was new
    • decrementOutstandingFloodfillSearches

      void decrementOutstandingFloodfillSearches()