Class 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.
    • Method Detail

      • runJob

        public void runJob()
        Description copied from interface: Job
        Actually perform the task. This call blocks until the Job is complete.
      • 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
      • 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
      • wasAttempted

        boolean wasAttempted​(Hash peer)
      • timeoutMs

        long timeoutMs()
      • add

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

        void decrementOutstandingFloodfillSearches()