package freenet.node;
import freenet.keys.Key;
public interface KeysFetchingLocally {
/**
* If we are fairly sure we'd like to send this request, we need to route it
* and determine whether it would be rejected with RecentlyFailed. Note that
* this method is fairly heavyweight and may involve locking PeerNode's and
* possibly other things.
* @param key The key to check.
* @return 0 if the request can be sent, otherwise the time at which it can
* be sent. The caller must incorporate this into the relevant cooldown
* structures to avoid an expensive recomputation.
*/
public long checkRecentlyFailed(Key key, boolean realTime);
/**
* Is this key currently being fetched locally?
* LOCKING: This should be safe just about anywhere, the lock protecting it is always taken last.
*/
public boolean hasKey(Key key, BaseSendableGet getterWaiting);
/**
* Is this request:token pair being executed? FIXME this should be tracked by the inserter
* itself.
*/
public boolean hasInsert(SendableRequestItemKey token);
}