Class 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 sesarches in parallel like FOSJ does. Public only for JobQueue, not a public API, not for external use.
Since:
0.8.9
  • Field Details

    • PROP_ENCRYPT_RI

      public static final String PROP_ENCRYPT_RI
      See Also:
    • DEFAULT_ENCRYPT_RI

      public static final boolean DEFAULT_ENCRYPT_RI
      only 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 interface Job
      Overrides:
      runJob in class FloodSearchJob
    • getName

      public String getName()
      Description copied from class: FloodSearchJob
      Deprecated, unused, see FOSJ override
      Specified by:
      getName in interface Job
      Overrides:
      getName in class FloodSearchJob
    • failed

      void failed(Hash peer, boolean timedOut)
      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

      void newPeerToTry(Hash peer)
      A new (floodfill) peer was discovered that may have the answer.
      Parameters:
      peer - may not actually be new
    • getFromHash

      public Hash getFromHash()
      Hash of the dest this query is from
      Returns:
      null for router
      Since:
      0.9.13
    • wasQueried

      public boolean wasQueried(Hash peer)
      Did we send a request to this peer?
      Since:
      0.9.13
    • timeSent

      long timeSent(Hash peer)
      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
      Specified by:
      dropped in interface Job
      Overrides:
      dropped in class JobImpl
      Since:
      0.9.31
    • failed

      void failed()
      Total failure
      Overrides:
      failed in class FloodSearchJob
    • success

      void success()
      Description copied from class: FloodSearchJob
      Deprecated, unused, see FOSJ override
      Overrides:
      success in class FloodSearchJob