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
The network database
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final charstatic final intThis is the flood redundancy.protected static final intNTCP 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 final longThis 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 -
Method Summary
Modifier and TypeMethodDescription(package private) voidMust be called by the search job queued by search() on success or failureprotected voidunused, see overrideprotected PeerSelectorvoidflood(DatabaseEntry ds) Send to a subset of all floodfill peers.booleanIf we are floodfill AND the key is not throttled, flood it, otherwise don't.booleanFor convenience, so users don't have to cast to FNDF, and unit tests using Dummy NDF will work.list of the Hashes of currently known floodfill peers; Returned list will not include our own hash.static booleanisFloodfill(RouterInfo peer) (package private) booleanprotected voidlookupBeforeDropping(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.voidpublish(RouterInfo localRouterInfo) Send our RI to the closest floodfill.(package private) SearchJobLookup using exploratory tunnels.(package private) SearchJobsearch(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease, Hash fromLocalDest) Lookup using the client's tunnels.(package private) voidsendStore(Hash key, DatabaseEntry ds, Job onSuccess, Job onFailure, long sendTimeout, Set<Hash> toIgnore) Send out a store.voidsetFloodfillEnabled(boolean yes) Public, called from console.(package private) voidsetFloodfillEnabledFromMonitor(boolean yes) Package private, called from FloodfillMonitorJob.(package private) booleanshouldThrottleFlood(Hash key) Increments and tests.(package private) booleanshouldThrottleLookup(Hash from, TunnelId id) Increments and tests.voidshutdown()If we are floodfill, turn it off and tell everybody.voidstartup()Instruct the service that it should start normal operation.(package private) void(package private) voidMethods 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, validateMethods inherited from class net.i2p.router.NetworkDatabaseFacade
store
-
Field Details
-
CAPABILITY_FLOODFILL
public static final char CAPABILITY_FLOODFILL- See Also:
-
MAX_TO_FLOOD
public static final int MAX_TO_FLOODThis 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:
-
PUBLISH_TIMEOUT
static final long PUBLISH_TIMEOUTThis 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:
-
MIN_ACTIVE_PEERS
protected static final int MIN_ACTIVE_PEERSNTCP cons drop quickly but SSU takes a while, so it's prudent to keep this a little higher than 1 or 2.- See Also:
-
-
Constructor Details
-
FloodfillNetworkDatabaseFacade
-
-
Method Details
-
startup
public void startup()Description copied from interface:ServiceInstruct the service that it should start normal operation. This call DOES block until the service is ready.- Specified by:
startupin interfaceService- Overrides:
startupin classKademliaNetworkDatabaseFacade
-
createHandlers
protected void createHandlers()Description copied from class:KademliaNetworkDatabaseFacadeunused, see override- Overrides:
createHandlersin classKademliaNetworkDatabaseFacade
-
shutdown
public void shutdown()If we are floodfill, turn it off and tell everybody.- Specified by:
shutdownin interfaceService- Overrides:
shutdownin classKademliaNetworkDatabaseFacade- Since:
- 0.8.9
-
publish
Send our RI to the closest floodfill.- Overrides:
publishin classKademliaNetworkDatabaseFacade- Throws:
IllegalArgumentException- if the local router info is invalid
-
sendStore
void sendStore(Hash key, DatabaseEntry ds, Job onSuccess, Job onFailure, long sendTimeout, Set<Hash> toIgnore) Send out a store.- Specified by:
sendStorein classKademliaNetworkDatabaseFacade- 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
-
shouldThrottleFlood
Increments and tests.- Since:
- 0.7.11
-
shouldThrottleLookup
Increments and tests.- Since:
- 0.7.11
-
floodConditional
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
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
- Specified by:
createPeerSelectorin 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:NetworkDatabaseFacadeFor convenience, so users don't have to cast to FNDF, and unit tests using Dummy NDF will work.- Overrides:
floodfillEnabledin classNetworkDatabaseFacade- Returns:
- false; FNDF overrides to return actual setting
-
isFloodfill
- Parameters:
peer- may be null, returns false if null
-
getKnownRouterData
-
search
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:
searchin 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:
searchin classKademliaNetworkDatabaseFacade- Parameters:
fromLocalDest- use these tunnels for the lookup, or null for exploratory- Returns:
- null always
- Since:
- 0.9.10
-
complete
Must be called by the search job queued by search() on success or failure -
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
- Since:
- 0.7.10
-
verifyStarted
- Since:
- 0.7.10
-
verifyFinished
- Since:
- 0.7.10
-
lookupBeforeDropping
Search for a newer router info, drop it from the db if the search fails, unless just started up or have bigger problems.- Overrides:
lookupBeforeDroppingin classKademliaNetworkDatabaseFacade
-