public class TunnelPool extends Object
| Modifier and Type | Field and Description |
|---|---|
protected boolean |
_alive |
protected RouterContext |
_context |
protected Log |
_log |
| Constructor and Description |
|---|
TunnelPool(RouterContext ctx,
TunnelPoolManager mgr,
TunnelPoolSettings settings,
TunnelPeerSelector sel) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
addTunnel(TunnelInfo info)
Add a tunnel to the pool.
|
(package private) void |
buildComplete(PooledTunnelCreatorConfig cfg,
BuildExecutor.Result result)
Remove from the _inprogress list and call addTunnel() if result is SUCCESS.
|
(package private) boolean |
buildFallback()
This will build a fallback tunnel only if:
- Exploratory pool: 0-hop fallback allowed
- Client pool with allowZeroHop=true AND configured for 0 hops: 0-hop fallback allowed
- Client pool configured for 1 hop: 1-hop fallback allowed
- Otherwise: build multi-hop tunnel (enforce 2-hop minimum)
|
(package private) void |
buildFinished(boolean isInbound)
Record that a tunnel build has completed for this pool.
|
(package private) void |
buildStarted(boolean isInbound)
Record that a tunnel build has started for this pool.
|
(package private) boolean |
canStartBuild(boolean isInbound)
Check if we can start a new tunnel build for the given direction.
|
(package private) void |
cleanupDuplicatePeerTunnels()
Scan pool for tunnels with duplicate peer sequences and remove duplicates.
|
(package private) PooledTunnelCreatorConfig |
configureNewTunnel()
This only sets the peers and creation/expiration times in the configuration.
|
(package private) int |
countHowManyToBuild()
Gather the data to see how many tunnels to build, and then actually compute that value (delegated to
the countHowManyToBuild function below)
|
int |
getAvgBWPerTunnel()
Get the average bandwidth per tunnel in the pool.
|
(package private) int |
getConcurrentInboundBuilds()
Get the current count of concurrent builds for inbound direction.
|
(package private) int |
getConcurrentOutboundBuilds()
Get the current count of concurrent builds for outbound direction.
|
(package private) int |
getConsecutiveBuildTimeouts()
Get the count of consecutive tunnel build timeouts.
|
int |
getInProgressCount()
Get the count of tunnels currently being built for this pool.
|
long |
getLifetimeProcessed()
Total lifetime processed bytes for this pool.
|
String |
getRateName()
RateStat name for the bandwidth graph
|
TunnelPoolSettings |
getSettings() |
int |
getTotalQuantity()
Get the adjusted total quantity of tunnels we want for this pool.
|
TunnelInfo |
getTunnel(TunnelId gatewayId)
Get a tunnel by its gateway tunnel ID.
|
(package private) int |
getTunnelCount()
duplicate of size(), let's pick one
|
boolean |
isAlive()
Is this pool running AND either exploratory, or tracked by the client manager?
A pool will be alive but not tracked after the client manager removes it
but before all the tunnels have expired.
|
List<PooledTunnelCreatorConfig> |
listPending()
list of tunnelInfo instances of tunnels currently being built
|
List<TunnelInfo> |
listTunnels()
Return a list of tunnels in the pool
|
protected LeaseSet |
locked_buildNewLeaseSet()
Build a leaseSet with the required tunnels that aren't about to expire.
|
(package private) boolean |
needFallback()
Do we really need more fallbacks?
Used to prevent a zillion of them.
|
(package private) void |
refreshLeaseSet()
noop for outbound and exploratory
|
(package private) void |
removeTunnel(TunnelInfo info)
Remove a tunnel from the pool.
|
(package private) TunnelInfo |
selectTunnel()
Pull a random tunnel out of the pool.
|
(package private) TunnelInfo |
selectTunnel(Hash closestTo)
Return the tunnel from the pool that is XOR-closest to the target.
|
(package private) void |
setSettings(TunnelPoolSettings settings) |
(package private) void |
shutdown()
Shut down the pool and clean up resources.
|
int |
size()
duplicate of getTunnelCount(), let's pick one
|
(package private) void |
startup()
Warning, this may be called more than once
(without an intervening shutdown()) if the
tunnel is stopped and then restarted by the client manager with the same
Destination (i.e.
|
String |
toString() |
(package private) void |
triggerReplacementBuild()
Trigger an immediate replacement build for this pool.
|
(package private) void |
tunnelFailed(TunnelInfo cfg)
Remove tunnel and blame all peers (not necessarily equally).
|
(package private) void |
tunnelFailed(TunnelInfo cfg,
Hash blamePeer)
Remove the tunnel and blame only one peer.
|
protected volatile boolean _alive
protected final RouterContext _context
protected final Log _log
TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel)
protected void addTunnel(TunnelInfo info)
info - the tunnel to addvoid buildComplete(PooledTunnelCreatorConfig cfg, BuildExecutor.Result result)
cfg - the completed tunnel configurationresult - the build resultboolean buildFallback()
void buildFinished(boolean isInbound)
isInbound - true for inbound pool, false for outboundvoid buildStarted(boolean isInbound)
isInbound - true for inbound pool, false for outboundboolean canStartBuild(boolean isInbound)
isInbound - true for inbound pool, false for outboundvoid cleanupDuplicatePeerTunnels()
PooledTunnelCreatorConfig configureNewTunnel()
int countHowManyToBuild()
public int getAvgBWPerTunnel()
int getConcurrentInboundBuilds()
int getConcurrentOutboundBuilds()
int getConsecutiveBuildTimeouts()
public int getInProgressCount()
public long getLifetimeProcessed()
public String getRateName()
public TunnelPoolSettings getSettings()
public int getTotalQuantity()
public TunnelInfo getTunnel(TunnelId gatewayId)
gatewayId - for inbound, the GW rcv tunnel ID; for outbound, the GW send tunnel ID.int getTunnelCount()
public boolean isAlive()
public List<PooledTunnelCreatorConfig> listPending()
public List<TunnelInfo> listTunnels()
protected LeaseSet locked_buildNewLeaseSet()
boolean needFallback()
void refreshLeaseSet()
void removeTunnel(TunnelInfo info)
info - tunnel to removeTunnelInfo selectTunnel()
TunnelInfo selectTunnel(Hash closestTo)
closestTo - the hash to find the closest tunnel tovoid setSettings(TunnelPoolSettings settings)
void shutdown()
public int size()
void startup()
void triggerReplacementBuild()
void tunnelFailed(TunnelInfo cfg)
cfg - the tunnel that failedvoid tunnelFailed(TunnelInfo cfg, Hash blamePeer)
cfg - the tunnel that failedblamePeer - the peer to blame