Class FloodfillNetworkDatabaseFacade
- java.lang.Object
-
- net.i2p.router.NetworkDatabaseFacade
-
- net.i2p.router.networkdb.kademlia.KademliaNetworkDatabaseFacade
-
- net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade
-
- All Implemented Interfaces:
Service
public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacade
The network database
-
-
Field Summary
Fields Modifier and Type Field Description static char
CAPABILITY_FLOODFILL
static int
MAX_TO_FLOOD
This is the flood redundancy.protected static int
MIN_ACTIVE_PEERS
NTCP cons drop quickly but SSU takes a while, so it's prudent to keep this a little higher than 1 or 2.(package private) static long
PUBLISH_TIMEOUT
This maybe could be shorter than RepublishLeaseSetJob.REPUBLISH_LEASESET_TIMEOUT, because we are sending direct, but unresponsive floodfills may take a while due to timeouts.-
Fields inherited from class net.i2p.router.networkdb.kademlia.KademliaNetworkDatabaseFacade
_context, _log, _networkID, _peerSelector, DEFAULT_DB_DIR, DONT_FAIL_PERIOD, MAX_EXPLORE_QUEUE, MIN_REMAINING_ROUTERS, MIN_RESEED, PROP_DB_DIR, PUBLISH_JOB_DELAY
-
-
Constructor Summary
Constructors Constructor Description FloodfillNetworkDatabaseFacade(RouterContext context)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
complete(Hash key)
Must be called by the search job queued by search() on success or failureprotected void
createHandlers()
unused, see overrideprotected PeerSelector
createPeerSelector()
void
flood(DatabaseEntry ds)
Send to a subset of all floodfill peers.boolean
floodConditional(DatabaseEntry ds)
If we are floodfill AND the key is not throttled, flood it, otherwise don't.boolean
floodfillEnabled()
For convenience, so users don't have to cast to FNDF, and unit tests using Dummy NDF will work.List<Hash>
getFloodfillPeers()
list of the Hashes of currently known floodfill peers; Returned list will not include our own hash.List<RouterInfo>
getKnownRouterData()
static boolean
isFloodfill(RouterInfo peer)
(package private) boolean
isVerifyInProgress(Hash h)
protected void
lookupBeforeDropping(Hash peer, RouterInfo info)
Search for a newer router info, drop it from the db if the search fails, unless just started up or have bigger problems.void
publish(RouterInfo localRouterInfo)
Send our RI to the closest floodfill.(package private) SearchJob
search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease)
Lookup using exploratory tunnels.(package private) SearchJob
search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease, Hash fromLocalDest)
Lookup using the client's tunnels.void
sendStore(Hash key, DatabaseEntry ds, Job onSuccess, Job onFailure, long sendTimeout, Set<Hash> toIgnore)
unused (overridden in FNDF)void
setFloodfillEnabled(boolean yes)
Public, called from console.(package private) void
setFloodfillEnabledFromMonitor(boolean yes)
Package private, called from FloodfillMonitorJob.(package private) boolean
shouldThrottleFlood(Hash key)
Increments and tests.(package private) boolean
shouldThrottleLookup(Hash from, TunnelId id)
Increments and tests.void
shutdown()
If we are floodfill, turn it off and tell everybody.void
startup()
Instruct the service that it should start normal operation.(package private) void
verifyFinished(Hash h)
(package private) void
verifyStarted(Hash h)
-
Methods inherited from class net.i2p.router.networkdb.kademlia.KademliaNetworkDatabaseFacade
dropAfterLookupFailed, fail, failPermanently, findNearestRouters, getAllRouters, getBlindData, getBlindData, getDataStore, getDbDir, getExploreKeys, getKBuckets, getKBucketSetSize, getKnownLeaseSets, getKnownRouters, getLastExploreNewDate, getLastRouterInfoPublishTime, getLeases, getPeerSelector, getPeerTimeout, getRouters, isInitialized, isNegativeCached, isNegativeCachedForever, lookupDestination, lookupDestinationLocally, lookupFailed, lookupLeaseSet, lookupLeaseSet, lookupLeaseSetLocally, lookupLeaseSetRemotely, lookupLeaseSetRemotely, lookupLocally, lookupLocallyWithoutValidation, lookupRouterInfo, lookupRouterInfoLocally, publish, queueForExploration, removeBlindData, removeFromExploreKeys, renderStatusHTML, rescan, reseedChecker, restart, routerInfoPublishSuccessful, routingKeyChanged, searchComplete, setBlindData, setLastExploreNewDate, stopPublishing, store, store, store, unpublish, validate
-
Methods inherited from class net.i2p.router.NetworkDatabaseFacade
store
-
-
-
-
Field Detail
-
CAPABILITY_FLOODFILL
public static final char CAPABILITY_FLOODFILL
- See Also:
- Constant Field Values
-
MAX_TO_FLOOD
public static final int MAX_TO_FLOOD
This is the flood redundancy. Entries are sent to this many other floodfills. Was 7 through release 0.9; 5 for 0.9.1. 4 as of 0.9.2; 3 as of 0.9.9- See Also:
- Constant Field Values
-
PUBLISH_TIMEOUT
static final long PUBLISH_TIMEOUT
This maybe could be shorter than RepublishLeaseSetJob.REPUBLISH_LEASESET_TIMEOUT, because we are sending direct, but unresponsive floodfills may take a while due to timeouts.- See Also:
- Constant Field Values
-
MIN_ACTIVE_PEERS
protected static final int MIN_ACTIVE_PEERS
NTCP cons drop quickly but SSU takes a while, so it's prudent to keep this a little higher than 1 or 2.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
FloodfillNetworkDatabaseFacade
public FloodfillNetworkDatabaseFacade(RouterContext context)
-
-
Method Detail
-
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.- Specified by:
startup
in interfaceService
- Overrides:
startup
in classKademliaNetworkDatabaseFacade
-
createHandlers
protected void createHandlers()
Description copied from class:KademliaNetworkDatabaseFacade
unused, see override- Overrides:
createHandlers
in classKademliaNetworkDatabaseFacade
-
shutdown
public void shutdown()
If we are floodfill, turn it off and tell everybody.- Specified by:
shutdown
in interfaceService
- Overrides:
shutdown
in classKademliaNetworkDatabaseFacade
- Since:
- 0.8.9
-
publish
public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException
Send our RI to the closest floodfill.- Overrides:
publish
in classKademliaNetworkDatabaseFacade
- Throws:
IllegalArgumentException
- if the local router info is invalid
-
sendStore
public void sendStore(Hash key, DatabaseEntry ds, Job onSuccess, Job onFailure, long sendTimeout, Set<Hash> toIgnore)
Description copied from class:KademliaNetworkDatabaseFacade
unused (overridden in FNDF)- Specified by:
sendStore
in classKademliaNetworkDatabaseFacade
-
shouldThrottleFlood
boolean shouldThrottleFlood(Hash key)
Increments and tests.- Since:
- 0.7.11
-
shouldThrottleLookup
boolean shouldThrottleLookup(Hash from, TunnelId id)
Increments and tests.- Since:
- 0.7.11
-
floodConditional
public boolean floodConditional(DatabaseEntry ds)
If we are floodfill AND the key is not throttled, flood it, otherwise don't.- Returns:
- if we did
- Since:
- 0.9.36 for NTCP2
-
flood
public void flood(DatabaseEntry ds)
Send to a subset of all floodfill peers. We do this to implement Kademlia within the floodfills, i.e. we flood to those closest to the key.
-
createPeerSelector
protected PeerSelector createPeerSelector()
- Specified by:
createPeerSelector
in classKademliaNetworkDatabaseFacade
-
setFloodfillEnabled
public void setFloodfillEnabled(boolean yes)
Public, called from console. This wakes up the floodfill monitor, which will rebuild the RI and log in the event log, and call setFloodfillEnabledFromMonitor which really sets it.
-
setFloodfillEnabledFromMonitor
void setFloodfillEnabledFromMonitor(boolean yes)
Package private, called from FloodfillMonitorJob. This does not wake up the floodfill monitor.- Since:
- 0.9.34
-
floodfillEnabled
public boolean floodfillEnabled()
Description copied from class:NetworkDatabaseFacade
For convenience, so users don't have to cast to FNDF, and unit tests using Dummy NDF will work.- Overrides:
floodfillEnabled
in classNetworkDatabaseFacade
- Returns:
- false; FNDF overrides to return actual setting
-
isFloodfill
public static boolean isFloodfill(RouterInfo peer)
- Parameters:
peer
- may be null, returns false if null
-
getKnownRouterData
public List<RouterInfo> getKnownRouterData()
-
search
SearchJob search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease)
Lookup using exploratory tunnels. Caller should check negative cache and/or banlist before calling. 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)- Overrides:
search
in classKademliaNetworkDatabaseFacade
- Returns:
- null always
-
search
SearchJob search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease, Hash fromLocalDest)
Lookup using the client's tunnels. Caller should check negative cache and/or banlist before calling.- Overrides:
search
in classKademliaNetworkDatabaseFacade
- Parameters:
fromLocalDest
- use these tunnels for the lookup, or null for exploratory- Returns:
- null always
- Since:
- 0.9.10
-
complete
void complete(Hash key)
Must be called by the search job queued by search() on success or failure
-
getFloodfillPeers
public List<Hash> getFloodfillPeers()
list of the Hashes of currently known floodfill peers; Returned list will not include our own hash. List is not sorted and not shuffled.
-
isVerifyInProgress
boolean isVerifyInProgress(Hash h)
- Since:
- 0.7.10
-
verifyStarted
void verifyStarted(Hash h)
- Since:
- 0.7.10
-
verifyFinished
void verifyFinished(Hash h)
- Since:
- 0.7.10
-
lookupBeforeDropping
protected void lookupBeforeDropping(Hash peer, RouterInfo info)
Search for a newer router info, drop it from the db if the search fails, unless just started up or have bigger problems.- Overrides:
lookupBeforeDropping
in classKademliaNetworkDatabaseFacade
-
-