## net.i2p.router.networkdb.kademlia
Class FloodOnlySearchJob

    java.lang.Object
      net.i2p.router.JobImpl
          net.i2p.router.networkdb.kademlia.FloodSearchJob
              net.i2p.router.networkdb.kademlia.FloodOnlySearchJob

All Implemented Interfaces:
  Job

Direct Known Subclasses:
  SingleSearchJob

     class FloodOnlySearchJob

extends FloodSearchJob

Try sending a search to some floodfill peers, failing completely if we don't get a match from one of those peers, with no fallback to the kademlia search Exception (a semi-exception, since we still fail completely without fallback): If we don't know any floodfill peers, we ask a couple of peers at random, who will hopefully reply with some floodfill keys. We still fail without fallback, but we then spin off a job to ask that same random peer for the RouterInfos for those keys. If that job succeeds, the next search should work better. In addition, we follow the floodfill keys in the DSRM (DatabaseSearchReplyMessage) if we know less than 4 floodfills. These enhancements allow the router to bootstrap back into the network after it loses (or never had) floodfill references, as long as it knows one peer that is up.

Field Summary
`protected ReplyJob` `_onReply`
`protected Job` `_onTimeout`
`protected MessageSelector` `_replySelector`

Fields inherited from class net.i2p.router.networkdb.kademlia.FloodSearchJob
`_expiration, _facade, _isLease, _key, _log, _lookupsRemaining, _onFailed, _onFind, _origExpiration, _timeoutMs`

Constructor Summary
`FloodOnlySearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease)`

Method Summary
`(package private) void` `decrementRemaining(Hash peer)` Note that we heard from the peer
`(package private) void` `failed()`
`long` `getCreated()`
`String` `getName()` Descriptive name of the task
`void` `runJob()` Actually perform the task.
`boolean` `shouldProcessDSRM()`
`(package private) void` `success()`

Methods inherited from class net.i2p.router.networkdb.kademlia.FloodSearchJob
`addDeferred, decrementRemaining, getExpiration, getKey, getLookupsRemaining`

Methods inherited from class net.i2p.router.JobImpl
`dropped, getAddedBy, getContext, getJobId, getMadeReadyOn, getTiming, madeReady, requeue, toString`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### _replySelector

    protected MessageSelector _replySelector

### _onReply

    protected ReplyJob _onReply

### _onTimeout

    protected Job _onTimeout

Constructor Detail

### FloodOnlySearchJob

    public FloodOnlySearchJob(RouterContext ctx,
                              FloodfillNetworkDatabaseFacade facade,
                              Hash key,
                              Job onFind,
                              Job onFailed,
                              int timeoutMs,
                              boolean isLease)

Method Detail

### getCreated

    public long getCreated()

### shouldProcessDSRM

    public boolean shouldProcessDSRM()

### runJob

    public void runJob()

  Description copied from interface: `Job`
  Actually perform the task. This call blocks until the Job is complete.

  Specified by:
    `runJob` in interface `Job`
  Overrides:
    `runJob` in class `FloodSearchJob`

### getName

    public String getName()

  Description copied from interface: `Job`
  Descriptive name of the task

  Specified by:
    `getName` in interface `Job`
  Overrides:
    `getName` in class `FloodSearchJob`

### decrementRemaining

    void decrementRemaining(Hash peer)

  Note that we heard from the peer

### failed

    void failed()

  Overrides:
    `failed` in class `FloodSearchJob`

### success

    void success()

  Overrides:
    `success` in class `FloodSearchJob`