Class KademliaNetworkDatabaseFacade
- java.lang.Object
-
- net.i2p.router.NetworkDatabaseFacade
-
- net.i2p.router.networkdb.kademlia.KademliaNetworkDatabaseFacade
-
- All Implemented Interfaces:
Service
- Direct Known Subclasses:
FloodfillNetworkDatabaseFacade
public abstract class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade
Kademlia based version of the network database. Never instantiated directly; see FloodfillNetworkDatabaseFacade.
-
-
Field Summary
Fields Modifier and Type Field Description protected RouterContext
_context
protected Log
_log
protected int
_networkID
protected PeerSelector
_peerSelector
static String
DEFAULT_DB_DIR
protected static long
DONT_FAIL_PERIOD
for the 10 minutes after startup, don't fail db entries so that if we were offline for a while, we'll have a chance of finding some live peers with the previous references(package private) static int
MAX_EXPLORE_QUEUE
protected static int
MIN_REMAINING_ROUTERS
if we have less than this many routers left, don't drop any more, even if they're failing or doing bad stuff.(package private) static int
MIN_RESEED
Reseed if below this.static String
PROP_DB_DIR
protected static long
PUBLISH_JOB_DELAY
this needs to be long enough to give us time to start up, but less than 20m (when we start accepting tunnels and could be a IBGW) Actually no, we need this soon if we are a new router or other routers have forgotten about us, else we can't build IB exploratory tunnels.
-
Constructor Summary
Constructors Constructor Description KademliaNetworkDatabaseFacade(RouterContext context, Hash dbid)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected BlindCache
blindCache()
We still always use a single blind cache in the main Db(for now), see issue #421 on i2pgit.org/i2p-hackers/i2p.i2p for details.protected void
createHandlers()
unused, see overrideprotected PeerSelector
createPeerSelector()
Only for main DB(package private) void
dropAfterLookupFailed(Hash peer)
Final remove for a router info.void
fail(Hash dbEntry)
Final remove for a leaseset.(package private) void
failPermanently(Destination dest)
Negative cache until restartSet<Hash>
findNearestRouters(Hash key, int maxNumRouters, Set<Hash> peersToIgnore)
Get the routers closest to that key in response to a remote lookup Only used by ../HDLMJ Set MAY INCLUDE our own router - add to peersToIgnore if you don't wantSet<Hash>
getAllRouters()
Get the hashes for all known routersList<BlindData>
getBlindData()
For console ConfigKeyringHelperBlindData
getBlindData(SigningPublicKey spk)
(package private) DataStore
getDataStore()
(package private) String
getDbDir()
For the main DB only.Set<Hash>
getExploreKeys()
(package private) KBucketSet<Hash>
getKBuckets()
protected int
getKBucketSetSize()
The KBucketSet contains RIs only.int
getKnownLeaseSets()
This is only used by StatisticsManager to publish the count if we are floodfill.int
getKnownRouters()
This used to return the number of routers that were in both the kbuckets AND the data store, which was fine when the kbuckets held everything.(package private) long
getLastExploreNewDate()
long
getLastRouterInfoPublishTime()
The last time we successfully published our RI.Set<LeaseSet>
getLeases()
public for NetDbRenderer in routerconsolePeerSelector
getPeerSelector()
int
getPeerTimeout(Hash peer)
todo: does this need more tuning?Set<RouterInfo>
getRouters()
Public for NetDbRenderer in routerconsoleboolean
isClientDb()
Check if the database is a client DB.boolean
isInitialized()
(package private) boolean
isNegativeCached(Hash key)
Is the key in the negative lookup cache?boolean
isNegativeCachedForever(Hash key)
Is it permanently negative cached?static boolean
isNewer(LeaseSet a, LeaseSet b)
Utility to determine if a is newer than b.protected void
lookupBeforeDropping(Hash peer, RouterInfo info)
don't use directly - see F.N.D.F.void
lookupDestination(Hash key, Job onFinishedJob, long timeoutMs, Hash fromLocalDest)
Lookup using the client's tunnels Succeeds even if LS validation and store fails due to unsupported sig type, expired, etc.Destination
lookupDestinationLocally(Hash key)
Lookup locally in netDB and in badDest cache Succeeds even if LS validation fails due to unsupported sig type, expired, etc.(package private) void
lookupFailed(Hash key)
Increment in the negative lookup cachevoid
lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)
Lookup using exploratory tunnels.void
lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, Hash fromLocalDest)
Lookup using the client's tunnels Use lookupDestination() if you don't need the LS or don't need it validated.LeaseSet
lookupLeaseSetLocally(Hash key)
Use lookupDestination() if you don't need the LS or don't need it validated.void
lookupLeaseSetRemotely(Hash key, Hash fromLocalDest)
Unconditionally lookup using the client's tunnels.void
lookupLeaseSetRemotely(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, Hash fromLocalDest)
Unconditionally lookup using the client's tunnels.DatabaseEntry
lookupLocally(Hash key)
DatabaseEntry
lookupLocallyWithoutValidation(Hash key)
Not for use without validationvoid
lookupRouterInfo(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)
RouterInfo
lookupRouterInfoLocally(Hash key)
This will return immediately with the result or null.void
publish(LeaseSet localLeaseSet)
Stores in local netdb, and publishes to floodfill if client manager says tovoid
publish(RouterInfo localRouterInfo)
Stores to local db only.void
queueForExploration(Collection<Hash> keys)
boolean
removeBlindData(SigningPublicKey spk)
For console ConfigKeyringHelpervoid
removeFromExploreKeys(Collection<Hash> toRemove)
void
renderStatusHTML(Writer out)
Debug info, HTML formattedvoid
rescan()
ReseedChecker
reseedChecker()
void
restart()
Deprecated.(package private) void
routerInfoPublishSuccessful()
Set the last time we successfully published our RI.void
routingKeyChanged()
Notify the netDB that the routing key changed at midnight UTC(package private) SearchJob
search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease)
Begin a kademlia style search for the key specified, which can take up to timeoutMs and will fire the appropriate jobs on success or timeout (or if the kademlia search completes without any match) Unused - called only by FNDF.searchFull() from FloodSearchJob which is overridden - don't use this.(package private) SearchJob
search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease, Hash fromLocalDest)
Unused - see FNDF(package private) void
searchComplete(Hash key)
The search for the given key is no longer active(package private) abstract void
sendStore(Hash key, DatabaseEntry ds, Job onSuccess, Job onFailure, long sendTimeout, Set<Hash> toIgnore)
See implementation in FNDFvoid
setBlindData(BlindData bd)
(package private) void
setLastExploreNewDate(long when)
void
shutdown()
Cannot be restarted.void
startup()
Instruct the service that it should start normal operation.(package private) void
stopPublishing(Hash target)
LeaseSet
store(Hash key, LeaseSet leaseSet)
Store the leaseSet.LeaseSet
store(Hash key, LeaseSet leaseSet, boolean force)
Store the leaseSet.RouterInfo
store(Hash key, RouterInfo routerInfo)
Store the routerInfo.(package private) RouterInfo
store(Hash key, RouterInfo routerInfo, boolean persist)
Store the routerInfo.String
toString()
void
unpublish(LeaseSet localLeaseSet)
String
validate(Hash key, LeaseSet leaseSet)
Determine whether this leaseSet will be accepted as valid and current given what we know now.(package private) String
validate(RouterInfo routerInfo)
Determine whether this routerInfo will be accepted as valid and current given what we know now.-
Methods inherited from class net.i2p.router.NetworkDatabaseFacade
floodfillEnabled, store
-
-
-
-
Field Detail
-
_log
protected final Log _log
-
_peerSelector
protected final PeerSelector _peerSelector
-
_context
protected final RouterContext _context
-
_networkID
protected final int _networkID
-
DONT_FAIL_PERIOD
protected static final long DONT_FAIL_PERIOD
for the 10 minutes after startup, don't fail db entries so that if we were offline for a while, we'll have a chance of finding some live peers with the previous references- See Also:
- Constant Field Values
-
PROP_DB_DIR
public static final String PROP_DB_DIR
- See Also:
- Constant Field Values
-
DEFAULT_DB_DIR
public static final String DEFAULT_DB_DIR
- See Also:
- Constant Field Values
-
MIN_RESEED
static final int MIN_RESEED
Reseed if below this.- Since:
- 0.9.4
- See Also:
- Constant Field Values
-
MIN_REMAINING_ROUTERS
protected static final int MIN_REMAINING_ROUTERS
if we have less than this many routers left, don't drop any more, even if they're failing or doing bad stuff. As of 0.9.4, we make this LOWER than the min for reseeding, so a reseed will be forced if necessary.- See Also:
- Constant Field Values
-
PUBLISH_JOB_DELAY
protected static final long PUBLISH_JOB_DELAY
this needs to be long enough to give us time to start up, but less than 20m (when we start accepting tunnels and could be a IBGW) Actually no, we need this soon if we are a new router or other routers have forgotten about us, else we can't build IB exploratory tunnels. Unused.- See Also:
- Constant Field Values
-
MAX_EXPLORE_QUEUE
static final int MAX_EXPLORE_QUEUE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
KademliaNetworkDatabaseFacade
public KademliaNetworkDatabaseFacade(RouterContext context, Hash dbid)
-
-
Method Detail
-
searchComplete
void searchComplete(Hash key)
The search for the given key is no longer active
-
isInitialized
public boolean isInitialized()
- Overrides:
isInitialized
in classNetworkDatabaseFacade
-
createPeerSelector
protected PeerSelector createPeerSelector()
Only for main DB
-
getPeerSelector
public PeerSelector getPeerSelector()
- Returns:
- the main DB's peer selector. Client DBs do not have their own.
-
reseedChecker
public ReseedChecker reseedChecker()
- Overrides:
reseedChecker
in classNetworkDatabaseFacade
- Since:
- 0.9
-
blindCache
protected BlindCache blindCache()
We still always use a single blind cache in the main Db(for now), see issue #421 on i2pgit.org/i2p-hackers/i2p.i2p for details. This checks if we're the main DB already and returns our blind cache if we are. If not, it looks up the main Db and gets it.- Returns:
- non-null
- Since:
- 0.9.61
-
getKBuckets
KBucketSet<Hash> getKBuckets()
- Returns:
- the main DB's KBucketSet. Client DBs do not have their own.
-
getDataStore
DataStore getDataStore()
-
getLastExploreNewDate
long getLastExploreNewDate()
-
setLastExploreNewDate
void setLastExploreNewDate(long when)
-
removeFromExploreKeys
public void removeFromExploreKeys(Collection<Hash> toRemove)
-
queueForExploration
public void queueForExploration(Collection<Hash> keys)
-
shutdown
public void shutdown()
Cannot be restarted.
-
restart
@Deprecated public void restart()
Deprecated.Unsupported, do not use- Throws:
UnsupportedOperationException
- always
-
rescan
public void rescan()
- Overrides:
rescan
in classNetworkDatabaseFacade
-
getDbDir
String getDbDir()
For the main DB only. Sub DBs are not persisted and must not access this directory.- Returns:
- null before startup() is called; non-null thereafter, even for subdbs.
-
isClientDb
public boolean isClientDb()
Check if the database is a client DB.- Returns:
- true if the database is a client DB, false otherwise
- Since:
- 0.9.61
-
startup
public void startup()
Description copied from interface:Service
Instruct the service that it should start normal operation. This call DOES block until the service is ready.
-
createHandlers
protected void createHandlers()
unused, see override
-
findNearestRouters
public Set<Hash> findNearestRouters(Hash key, int maxNumRouters, Set<Hash> peersToIgnore)
Get the routers closest to that key in response to a remote lookup Only used by ../HDLMJ Set MAY INCLUDE our own router - add to peersToIgnore if you don't want- Specified by:
findNearestRouters
in classNetworkDatabaseFacade
- Parameters:
key
- the real key, NOT the routing keypeersToIgnore
- can be nullmaxNumRouters
- The maximum number of routers to return
-
getAllRouters
public Set<Hash> getAllRouters()
Get the hashes for all known routers- Specified by:
getAllRouters
in classNetworkDatabaseFacade
- Returns:
- empty set if this is a client DB
-
getKnownRouters
public int getKnownRouters()
This used to return the number of routers that were in both the kbuckets AND the data store, which was fine when the kbuckets held everything. But now that is probably not what you want. Just return the count in the data store.- Overrides:
getKnownRouters
in classNetworkDatabaseFacade
- Returns:
- 0 if this is a client DB
-
getKnownLeaseSets
public int getKnownLeaseSets()
This is only used by StatisticsManager to publish the count if we are floodfill. So to hide a clue that a popular eepsite is hosted on a floodfill router, only count leasesets that are "received as published", as of 0.7.14- Overrides:
getKnownLeaseSets
in classNetworkDatabaseFacade
-
getKBucketSetSize
protected int getKBucketSetSize()
The KBucketSet contains RIs only.
-
getBlindData
public BlindData getBlindData(SigningPublicKey spk)
- Overrides:
getBlindData
in classNetworkDatabaseFacade
- Parameters:
spk
- unblinded key- Returns:
- BlindData or null
- Since:
- 0.9.40
-
setBlindData
public void setBlindData(BlindData bd)
- Overrides:
setBlindData
in classNetworkDatabaseFacade
- Parameters:
bd
- new BlindData to put in the cache- Since:
- 0.9.40
-
getBlindData
public List<BlindData> getBlindData()
For console ConfigKeyringHelper- Overrides:
getBlindData
in classNetworkDatabaseFacade
- Since:
- 0.9.41
-
removeBlindData
public boolean removeBlindData(SigningPublicKey spk)
For console ConfigKeyringHelper- Overrides:
removeBlindData
in classNetworkDatabaseFacade
- Parameters:
spk
- the unblinded public key- Returns:
- true if removed
- Since:
- 0.9.41
-
routingKeyChanged
public void routingKeyChanged()
Notify the netDB that the routing key changed at midnight UTC- Overrides:
routingKeyChanged
in classNetworkDatabaseFacade
- Since:
- 0.9.50
-
lookupLocally
public DatabaseEntry lookupLocally(Hash key)
- Specified by:
lookupLocally
in classNetworkDatabaseFacade
- Returns:
- RouterInfo, LeaseSet, or null, validated
- Since:
- 0.8.3
-
lookupLocallyWithoutValidation
public DatabaseEntry lookupLocallyWithoutValidation(Hash key)
Not for use without validation- Specified by:
lookupLocallyWithoutValidation
in classNetworkDatabaseFacade
- Returns:
- RouterInfo, LeaseSet, or null, NOT validated
- Since:
- 0.9.9, public since 0.9.38
-
lookupLeaseSet
public void lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)
Lookup using exploratory tunnels. Use lookupDestination() if you don't need the LS or don't need it validated.- Specified by:
lookupLeaseSet
in classNetworkDatabaseFacade
-
lookupLeaseSet
public void lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, Hash fromLocalDest)
Lookup using the client's tunnels Use lookupDestination() if you don't need the LS or don't need it validated.- Specified by:
lookupLeaseSet
in classNetworkDatabaseFacade
- Parameters:
fromLocalDest
- use these tunnels for the lookup, or null for exploratory- Since:
- 0.9.10
-
lookupLeaseSetRemotely
public void lookupLeaseSetRemotely(Hash key, Hash fromLocalDest)
Unconditionally lookup using the client's tunnels. No success or failed jobs, no local lookup, no checks. Use this to refresh a leaseset before expiration.- Specified by:
lookupLeaseSetRemotely
in classNetworkDatabaseFacade
- Parameters:
fromLocalDest
- use these tunnels for the lookup, or null for exploratory- Since:
- 0.9.25
-
lookupLeaseSetRemotely
public void lookupLeaseSetRemotely(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, Hash fromLocalDest)
Unconditionally lookup using the client's tunnels.- Specified by:
lookupLeaseSetRemotely
in classNetworkDatabaseFacade
- Parameters:
fromLocalDest
- use these tunnels for the lookup, or null for exploratoryonFindJob
- may be nullonFailedLookupJob
- may be null- Since:
- 0.9.47
-
lookupLeaseSetLocally
public LeaseSet lookupLeaseSetLocally(Hash key)
Use lookupDestination() if you don't need the LS or don't need it validated.- Specified by:
lookupLeaseSetLocally
in classNetworkDatabaseFacade
-
lookupDestination
public void lookupDestination(Hash key, Job onFinishedJob, long timeoutMs, Hash fromLocalDest)
Lookup using the client's tunnels Succeeds even if LS validation and store fails due to unsupported sig type, expired, etc. Note that there are not separate success and fail jobs. Caller must call lookupDestinationLocally() in the job to determine success.- Specified by:
lookupDestination
in classNetworkDatabaseFacade
- Parameters:
onFinishedJob
- non-nullfromLocalDest
- use these tunnels for the lookup, or null for exploratory- Since:
- 0.9.16
-
lookupDestinationLocally
public Destination lookupDestinationLocally(Hash key)
Lookup locally in netDB and in badDest cache Succeeds even if LS validation fails due to unsupported sig type, expired, etc.- Specified by:
lookupDestinationLocally
in classNetworkDatabaseFacade
- Since:
- 0.9.16
-
lookupRouterInfo
public void lookupRouterInfo(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)
- Specified by:
lookupRouterInfo
in classNetworkDatabaseFacade
-
lookupRouterInfoLocally
public RouterInfo lookupRouterInfoLocally(Hash key)
This will return immediately with the result or null. However, this may still fire off a lookup if the RI is present but expired (and will return null). This may result in deadlocks. For true local only, use lookupLocallyWithoutValidation()- Specified by:
lookupRouterInfoLocally
in classNetworkDatabaseFacade
- Returns:
- null always for client dbs
-
publish
public void publish(LeaseSet localLeaseSet) throws IllegalArgumentException
Stores in local netdb, and publishes to floodfill if client manager says to- Specified by:
publish
in classNetworkDatabaseFacade
- Throws:
IllegalArgumentException
- if the leaseSet is not valid
-
stopPublishing
void stopPublishing(Hash target)
-
publish
public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException
Stores to local db only. Overridden in FNDF to actually send to the floodfills.- Specified by:
publish
in classNetworkDatabaseFacade
- Throws:
IllegalArgumentException
- if the local router info is invalid or if this is a client DB
-
routerInfoPublishSuccessful
void routerInfoPublishSuccessful()
Set the last time we successfully published our RI.- Since:
- 0.9.9
-
getLastRouterInfoPublishTime
public long getLastRouterInfoPublishTime()
The last time we successfully published our RI.- Overrides:
getLastRouterInfoPublishTime
in classNetworkDatabaseFacade
- Since:
- 0.9.9
-
validate
public String validate(Hash key, LeaseSet leaseSet) throws UnsupportedCryptoException
Determine whether this leaseSet will be accepted as valid and current given what we know now. Unlike for RouterInfos, this is only called once, when stored. After that, LeaseSet.isCurrent() is used.- Returns:
- reason why the entry is not valid, or null if it is valid
- Throws:
UnsupportedCryptoException
- if that's why it failed.
-
store
public LeaseSet store(Hash key, LeaseSet leaseSet) throws IllegalArgumentException
Store the leaseSet. If the store fails due to unsupported crypto, it will negative cache the hash until restart.- Specified by:
store
in classNetworkDatabaseFacade
- Returns:
- previous entry or null
- Throws:
IllegalArgumentException
- if the leaseSet is not validUnsupportedCryptoException
- if that's why it failed.
-
store
public LeaseSet store(Hash key, LeaseSet leaseSet, boolean force) throws IllegalArgumentException
Store the leaseSet. If the store fails due to unsupported crypto, it will negative cache the hash until restart.- Parameters:
force
- always store even if not newer- Returns:
- previous entry or null
- Throws:
IllegalArgumentException
- if the leaseSet is not validUnsupportedCryptoException
- if that's why it failed.- Since:
- 0.9.64
-
isNewer
public static boolean isNewer(LeaseSet a, LeaseSet b)
Utility to determine if a is newer than b. Uses publish date if a and b are both LS2, else earliest lease date.- Parameters:
a
- non-nullb
- non-null- Returns:
- if a is newer than b
- Since:
- 0.9.64
-
validate
String validate(RouterInfo routerInfo) throws IllegalArgumentException
Determine whether this routerInfo will be accepted as valid and current given what we know now. Call this before each use, to check expiration- Returns:
- reason why the entry is not valid, or null if it is valid
- Throws:
IllegalArgumentException
- Since:
- 0.9.7
-
store
public RouterInfo store(Hash key, RouterInfo routerInfo) throws IllegalArgumentException
Store the routerInfo. If the store fails due to unsupported crypto, it will banlist the router hash until restart and then throw UnsupportedCrytpoException.- Specified by:
store
in classNetworkDatabaseFacade
- Returns:
- previous entry or null
- Throws:
IllegalArgumentException
- if the routerInfo is not validUnsupportedCryptoException
- if that's why it failed.
-
store
RouterInfo store(Hash key, RouterInfo routerInfo, boolean persist) throws IllegalArgumentException
Store the routerInfo. If the store fails due to unsupported crypto, it will banlist the router hash until restart and then throw UnsupportedCrytpoException.- Returns:
- previous entry or null
- Throws:
IllegalArgumentException
- if the routerInfo is not validUnsupportedCryptoException
- if that's why it failed.
-
fail
public void fail(Hash dbEntry)
Final remove for a leaseset. For a router info, will look up in the network before dropping.- Specified by:
fail
in classNetworkDatabaseFacade
-
lookupBeforeDropping
protected void lookupBeforeDropping(Hash peer, RouterInfo info)
don't use directly - see F.N.D.F. override
-
dropAfterLookupFailed
void dropAfterLookupFailed(Hash peer)
Final remove for a router info. Do NOT use for leasesets.
-
unpublish
public void unpublish(LeaseSet localLeaseSet)
- Specified by:
unpublish
in classNetworkDatabaseFacade
-
search
SearchJob search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease)
Begin a kademlia style search for the key specified, which can take up to timeoutMs and will fire the appropriate jobs on success or timeout (or if the kademlia search completes without any match) Unused - called only by FNDF.searchFull() from FloodSearchJob which is overridden - don't use this.- Throws:
UnsupportedOperationException
- always
-
search
SearchJob search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease, Hash fromLocalDest)
Unused - see FNDF- Throws:
UnsupportedOperationException
- always- Since:
- 0.9.10
-
getLeases
public Set<LeaseSet> getLeases()
public for NetDbRenderer in routerconsole- Overrides:
getLeases
in classNetworkDatabaseFacade
-
getRouters
public Set<RouterInfo> getRouters()
Public for NetDbRenderer in routerconsole- Overrides:
getRouters
in classNetworkDatabaseFacade
- Returns:
- empty set if this is a client DB
-
getPeerTimeout
public int getPeerTimeout(Hash peer)
todo: does this need more tuning?
-
sendStore
abstract void sendStore(Hash key, DatabaseEntry ds, Job onSuccess, Job onFailure, long sendTimeout, Set<Hash> toIgnore)
See implementation in FNDF- Parameters:
key
- the DatabaseEntry hashonSuccess
- may be null, always called if we are ff and ds is an RIonFailure
- may be null, ignored if we are ff and ds is an RIsendTimeout
- ignored if we are ff and ds is an RItoIgnore
- may be null, if non-null, all attempted and skipped targets will be added as of 0.9.53, unused if we are ff and ds is an RI
-
lookupFailed
void lookupFailed(Hash key)
Increment in the negative lookup cache- Parameters:
key
- for Destinations or RouterIdentities- Since:
- 0.9.4 moved from FNDF to KNDF in 0.9.16
-
isNegativeCached
boolean isNegativeCached(Hash key)
Is the key in the negative lookup cache?- Parameters:
key
- for Destinations or RouterIdentities- Since:
- 0.9.4 moved from FNDF to KNDF in 0.9.16
-
failPermanently
void failPermanently(Destination dest)
Negative cache until restart- Since:
- 0.9.16
-
isNegativeCachedForever
public boolean isNegativeCachedForever(Hash key)
Is it permanently negative cached?- Overrides:
isNegativeCachedForever
in classNetworkDatabaseFacade
- Parameters:
key
- only for Destinations; for RouterIdentities, see Banlist- Since:
- 0.9.16
-
renderStatusHTML
public void renderStatusHTML(Writer out) throws IOException
Debug info, HTML formatted- Specified by:
renderStatusHTML
in interfaceService
- Overrides:
renderStatusHTML
in classNetworkDatabaseFacade
- Throws:
IOException
- Since:
- 0.9.10
-
-