forked from I2P_Developers/i2p.i2p
NetDB: Type changes (Gitlab #402)
This commit is contained in:
@@ -106,7 +106,7 @@ public class ConfigAdvancedHandler extends FormHandler {
|
||||
private void saveFF() {
|
||||
boolean saved = _context.router().saveConfig(ConfigAdvancedHelper.PROP_FLOODFILL_PARTICIPANT, _ff);
|
||||
if (_ff.equals("false") || _ff.equals("true")) {
|
||||
FloodfillNetworkDatabaseFacade fndf = _context.netDb();
|
||||
FloodfillNetworkDatabaseFacade fndf = (FloodfillNetworkDatabaseFacade) _context.netDb();
|
||||
boolean isFF = _ff.equals("true");
|
||||
// this will rebuild the RI, log in the event log, etc.
|
||||
fndf.setFloodfillEnabled(isFF);
|
||||
|
||||
@@ -985,13 +985,14 @@ public class SummaryHelper extends HelperBase {
|
||||
.append("</b></div>");
|
||||
}
|
||||
|
||||
// checker will be null for DummyNetworkDatabaseFacade
|
||||
ReseedChecker checker = _context.netDb().reseedChecker();
|
||||
String status = checker.getStatus();
|
||||
String status = checker != null ? checker.getStatus() : "";
|
||||
if (status.length() > 0) {
|
||||
// Show status message even if not running, timer in ReseedChecker should remove after 20 minutes
|
||||
buf.append("<div class=\"sb_notice\"><i>").append(status).append("</i></div>");
|
||||
}
|
||||
if (!checker.inProgress()) {
|
||||
if (checker != null && !checker.inProgress()) {
|
||||
// If a new reseed isn't running, and the last reseed had errors, show error message
|
||||
String reseedErrorMessage = checker.getError();
|
||||
if (reseedErrorMessage.length() > 0) {
|
||||
|
||||
@@ -244,10 +244,9 @@ public class RouterContext extends I2PAppContext {
|
||||
//_messageStateMonitor = new MessageStateMonitor(this);
|
||||
_routingKeyGenerator = new RouterKeyGenerator(this);
|
||||
if (!getBooleanProperty("i2p.dummyNetDb"))
|
||||
//_netDb = new FloodfillNetworkDatabaseFacade(this); // new KademliaNetworkDatabaseFacade(this);
|
||||
_netDb = new FloodfillNetworkDatabaseSegmentor(this); // new KademliaNetworkDatabaseFacade(this);
|
||||
_netDb = new FloodfillNetworkDatabaseSegmentor(this);
|
||||
else
|
||||
_netDb = new DummyNetworkDatabaseFacade(this);
|
||||
_netDb = new DummyNetworkDatabaseSegmentor(this);
|
||||
_keyManager = new KeyManager(this);
|
||||
if (!getBooleanProperty("i2p.vmCommSystem"))
|
||||
_commSystem = new CommSystemFacadeImpl(this);
|
||||
@@ -371,10 +370,23 @@ public class RouterContext extends I2PAppContext {
|
||||
|
||||
/**
|
||||
* Our db cache
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public SegmentedNetworkDatabaseFacade netDbSegmentor() { return _netDb; }
|
||||
public FloodfillNetworkDatabaseFacade netDb() { return _netDb.mainNetDB(); }
|
||||
public FloodfillNetworkDatabaseFacade clientNetDb(Hash id) { return _netDb.clientNetDB(id); }
|
||||
|
||||
public NetworkDatabaseFacade netDb() { return _netDb.mainNetDB(); }
|
||||
|
||||
/**
|
||||
* Get the client netDb for the given id.
|
||||
* Will return the main netDb if
|
||||
* the dbid is null or the client db is not found.
|
||||
*
|
||||
* @since 0.9.60
|
||||
* @param id may be null
|
||||
* @return non-null
|
||||
*/
|
||||
public NetworkDatabaseFacade clientNetDb(Hash id) { return _netDb.clientNetDB(id); }
|
||||
|
||||
/**
|
||||
* The actual driver of the router, where all jobs are enqueued and processed.
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,6 @@ package net.i2p.router.dummy;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -21,29 +20,18 @@ import net.i2p.data.Hash;
|
||||
import net.i2p.data.LeaseSet;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.Job;
|
||||
import net.i2p.router.NetworkDatabaseFacade;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
|
||||
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseSegmentor;
|
||||
import net.i2p.router.networkdb.kademlia.KademliaNetworkDatabaseFacade;
|
||||
import net.i2p.router.networkdb.kademlia.SegmentedNetworkDatabaseFacade;
|
||||
|
||||
public class DummyNetworkDatabaseFacade extends SegmentedNetworkDatabaseFacade {
|
||||
public class DummyNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
private final Map<Hash, RouterInfo> _routers;
|
||||
private final RouterContext _context;
|
||||
private final FloodfillNetworkDatabaseFacade _fndb;
|
||||
|
||||
public DummyNetworkDatabaseFacade(RouterContext ctx) {
|
||||
super(ctx);
|
||||
_fndb = new FloodfillNetworkDatabaseFacade(ctx, FloodfillNetworkDatabaseSegmentor.MAIN_DBID);
|
||||
_fndb.startup();
|
||||
_routers = Collections.synchronizedMap(new HashMap<Hash, RouterInfo>());
|
||||
_context = ctx;
|
||||
}
|
||||
|
||||
public FloodfillNetworkDatabaseFacade getSubNetDB(Hash dbid){
|
||||
return null;
|
||||
}
|
||||
|
||||
public void restart() {}
|
||||
public void shutdown() {}
|
||||
public void startup() {
|
||||
@@ -89,14 +77,4 @@ public class DummyNetworkDatabaseFacade extends SegmentedNetworkDatabaseFacade {
|
||||
|
||||
public Set<Hash> getAllRouters() { return new HashSet<Hash>(_routers.keySet()); }
|
||||
public Set<Hash> findNearestRouters(Hash key, int maxNumRouters, Set<Hash> peersToIgnore) { return getAllRouters(); }
|
||||
|
||||
@Override
|
||||
public FloodfillNetworkDatabaseFacade mainNetDB() {
|
||||
return _fndb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FloodfillNetworkDatabaseFacade clientNetDB(Hash id) {
|
||||
return _fndb;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package net.i2p.router.dummy;
|
||||
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.NetworkDatabaseFacade;
|
||||
import net.i2p.router.networkdb.kademlia.SegmentedNetworkDatabaseFacade;
|
||||
|
||||
/**
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public class DummyNetworkDatabaseSegmentor extends SegmentedNetworkDatabaseFacade {
|
||||
private final NetworkDatabaseFacade _fndb;
|
||||
|
||||
public DummyNetworkDatabaseSegmentor(RouterContext ctx) {
|
||||
_fndb = new DummyNetworkDatabaseFacade(ctx);
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
_fndb.shutdown();
|
||||
}
|
||||
|
||||
public void startup() {
|
||||
_fndb.startup();
|
||||
}
|
||||
|
||||
public NetworkDatabaseFacade mainNetDB() {
|
||||
return _fndb;
|
||||
}
|
||||
|
||||
public NetworkDatabaseFacade clientNetDB(Hash id) {
|
||||
return _fndb;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,7 @@
|
||||
package net.i2p.router.networkdb.kademlia;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import net.i2p.data.BlindData;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.LeaseSet;
|
||||
import net.i2p.data.SigningPublicKey;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.NetworkDatabaseFacade;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
@@ -48,8 +40,8 @@ import net.i2p.util.Log;
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public class FloodfillNetworkDatabaseSegmentor extends SegmentedNetworkDatabaseFacade {
|
||||
protected final Log _log;
|
||||
private RouterContext _context;
|
||||
private final Log _log;
|
||||
private final RouterContext _context;
|
||||
//private static final String PROP_NETDB_ISOLATION = "router.netdb.isolation";
|
||||
public static final Hash MAIN_DBID = null;
|
||||
private final FloodfillNetworkDatabaseFacade _mainDbid;
|
||||
@@ -62,10 +54,8 @@ public class FloodfillNetworkDatabaseSegmentor extends SegmentedNetworkDatabaseF
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public FloodfillNetworkDatabaseSegmentor(RouterContext context) {
|
||||
super(context);
|
||||
_log = context.logManager().getLog(getClass());
|
||||
if (_context == null)
|
||||
_context = context;
|
||||
_context = context;
|
||||
_mainDbid = new FloodfillNetworkDatabaseFacade(_context, MAIN_DBID);
|
||||
}
|
||||
|
||||
@@ -81,11 +71,11 @@ public class FloodfillNetworkDatabaseSegmentor extends SegmentedNetworkDatabaseF
|
||||
* @param id the ID of the FloodfillNetworkDatabaseFacade object to retrieve
|
||||
* @return the FloodfillNetworkDatabaseFacade object corresponding to the ID or null if it does not exist.
|
||||
*/
|
||||
@Override
|
||||
protected FloodfillNetworkDatabaseFacade getSubNetDB(Hash id) {
|
||||
private NetworkDatabaseFacade getSubNetDB(Hash id) {
|
||||
return _context.clientManager().getClientFloodfillNetworkDatabaseFacade(id);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* If we are floodfill, turn it off and tell everybody for the _mainDbid
|
||||
*
|
||||
@@ -117,7 +107,7 @@ public class FloodfillNetworkDatabaseSegmentor extends SegmentedNetworkDatabaseF
|
||||
* @return may be null
|
||||
*/
|
||||
@Override
|
||||
public FloodfillNetworkDatabaseFacade mainNetDB() {
|
||||
public NetworkDatabaseFacade mainNetDB() {
|
||||
return _mainDbid;
|
||||
}
|
||||
|
||||
@@ -130,11 +120,11 @@ public class FloodfillNetworkDatabaseSegmentor extends SegmentedNetworkDatabaseF
|
||||
* @return may be null if the client netDb does not exist
|
||||
*/
|
||||
@Override
|
||||
public FloodfillNetworkDatabaseFacade clientNetDB(Hash id) {
|
||||
public NetworkDatabaseFacade clientNetDB(Hash id) {
|
||||
if (_log.shouldDebug())
|
||||
_log.debug("looked up clientNetDB: " + id);
|
||||
if (id != null){
|
||||
FloodfillNetworkDatabaseFacade fndf = getSubNetDB(id);
|
||||
NetworkDatabaseFacade fndf = getSubNetDB(id);
|
||||
if (fndf != null)
|
||||
return fndf;
|
||||
}
|
||||
|
||||
@@ -248,12 +248,13 @@ public abstract class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacad
|
||||
* 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.
|
||||
*
|
||||
* @return
|
||||
* @return non-null
|
||||
* @since 0.9.60
|
||||
*/
|
||||
protected BlindCache blindCache() {
|
||||
if (!isClientDb())
|
||||
return _blindCache;
|
||||
return _context.netDb().blindCache();
|
||||
return ((FloodfillNetworkDatabaseFacade) _context.netDb()).blindCache();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -365,7 +366,7 @@ public abstract class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacad
|
||||
RouterInfo ri = _context.router().getRouterInfo();
|
||||
String dbDir = _context.getProperty(PROP_DB_DIR, DEFAULT_DB_DIR);
|
||||
if (isClientDb())
|
||||
_kb = _context.netDb().getKBuckets();
|
||||
_kb = ((FloodfillNetworkDatabaseFacade) _context.netDb()).getKBuckets();
|
||||
else
|
||||
_kb = new KBucketSet<Hash>(_context, ri.getIdentity().getHash(),
|
||||
BUCKET_SIZE, KAD_B, new RejectTrimmer<Hash>());
|
||||
|
||||
@@ -1,24 +1,7 @@
|
||||
package net.i2p.router.networkdb.kademlia;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
|
||||
import net.i2p.data.BlindData;
|
||||
import net.i2p.data.DatabaseEntry;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.LeaseSet;
|
||||
import net.i2p.data.SigningPublicKey;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.Job;
|
||||
import net.i2p.router.NetworkDatabaseFacade;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.networkdb.reseed.ReseedChecker;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
* SegmentedNetworkDatabaseFacade
|
||||
@@ -57,23 +40,15 @@ import net.i2p.util.Log;
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public abstract class SegmentedNetworkDatabaseFacade {
|
||||
public SegmentedNetworkDatabaseFacade(RouterContext context) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a sub-netDb using a Hash identifier
|
||||
*
|
||||
* @return client subDb for hash, or null if it does not exist
|
||||
* @since 0.9.60
|
||||
*/
|
||||
protected abstract FloodfillNetworkDatabaseFacade getSubNetDB(Hash dbid);
|
||||
/**
|
||||
* Get the main netDb, the one which is used if we're a floodfill
|
||||
*
|
||||
* @return may be null if main netDb is not initialized
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public abstract FloodfillNetworkDatabaseFacade mainNetDB();
|
||||
public abstract NetworkDatabaseFacade mainNetDB();
|
||||
|
||||
/**
|
||||
* Get a client netDb for a given client Hash identifier. Will never
|
||||
* return the mainNetDB.
|
||||
@@ -81,13 +56,15 @@ public abstract class SegmentedNetworkDatabaseFacade {
|
||||
* @return may be null if the client netDb does not exist
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public abstract FloodfillNetworkDatabaseFacade clientNetDB(Hash dbid);
|
||||
public abstract NetworkDatabaseFacade clientNetDB(Hash dbid);
|
||||
|
||||
/**
|
||||
* Shut down the network databases
|
||||
*
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public abstract void shutdown();
|
||||
|
||||
/**
|
||||
* Start up the network databases
|
||||
*
|
||||
|
||||
@@ -207,7 +207,7 @@ abstract class StoreJob extends JobImpl {
|
||||
for (Hash peer : closestHashes) {
|
||||
DatabaseEntry ds;
|
||||
if (_facade.isClientDb())
|
||||
ds = getContext().netDb().getDataStore().get(peer);
|
||||
ds = ((FloodfillNetworkDatabaseFacade) getContext().netDb()).getDataStore().get(peer);
|
||||
else
|
||||
ds = _facade.getDataStore().get(peer);
|
||||
if ( (ds == null) || !(ds.getType() == DatabaseEntry.KEY_TYPE_ROUTERINFO) ) {
|
||||
|
||||
@@ -691,7 +691,7 @@ class InboundEstablishState extends EstablishBase implements NTCP2Payload.Payloa
|
||||
try {
|
||||
RouterInfo old = _context.netDb().store(h, ri);
|
||||
if (flood && !ri.equals(old)) {
|
||||
FloodfillNetworkDatabaseFacade fndf = _context.netDb();
|
||||
FloodfillNetworkDatabaseFacade fndf = (FloodfillNetworkDatabaseFacade) _context.netDb();
|
||||
if (fndf.floodConditional(ri)) {
|
||||
if (_log.shouldDebug())
|
||||
_log.debug("Flooded the RI: " + h);
|
||||
|
||||
@@ -1670,7 +1670,7 @@ public class NTCPConnection implements Closeable {
|
||||
return;
|
||||
RouterInfo old = _context.netDb().store(h, ri);
|
||||
if (flood && !ri.equals(old)) {
|
||||
FloodfillNetworkDatabaseFacade fndf = _context.netDb();
|
||||
FloodfillNetworkDatabaseFacade fndf = (FloodfillNetworkDatabaseFacade) _context.netDb();
|
||||
if ((old == null || ri.getPublished() > old.getPublished()) &&
|
||||
fndf.floodConditional(ri)) {
|
||||
if (_log.shouldDebug())
|
||||
|
||||
@@ -376,7 +376,7 @@ class InboundEstablishState2 extends InboundEstablishState implements SSU2Payloa
|
||||
try {
|
||||
RouterInfo old = _context.netDb().store(h, ri);
|
||||
if (flood && !ri.equals(old)) {
|
||||
FloodfillNetworkDatabaseFacade fndf = _context.netDb();
|
||||
FloodfillNetworkDatabaseFacade fndf = (FloodfillNetworkDatabaseFacade) _context.netDb();
|
||||
if (fndf.floodConditional(ri)) {
|
||||
if (_log.shouldDebug())
|
||||
_log.debug("Flooded the RI: " + h);
|
||||
|
||||
@@ -634,7 +634,7 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
return;
|
||||
RouterInfo old = _context.netDb().store(h, ri);
|
||||
if (flood && !ri.equals(old)) {
|
||||
FloodfillNetworkDatabaseFacade fndf = _context.netDb();
|
||||
FloodfillNetworkDatabaseFacade fndf = (FloodfillNetworkDatabaseFacade) _context.netDb();
|
||||
if ((old == null || ri.getPublished() > old.getPublished()) &&
|
||||
fndf.floodConditional(ri)) {
|
||||
if (_log.shouldDebug())
|
||||
|
||||
@@ -267,7 +267,7 @@ class InboundMessageDistributor implements GarlicMessageReceiver.CloveReceiver {
|
||||
if (dsm.getEntry().isLeaseSet()) {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("[client: " + _clientNickname + "] Saving LS DSM from client tunnel.");
|
||||
FloodfillDatabaseStoreMessageHandler _FDSMH = new FloodfillDatabaseStoreMessageHandler(_context, _context.clientNetDb(_client));
|
||||
FloodfillDatabaseStoreMessageHandler _FDSMH = new FloodfillDatabaseStoreMessageHandler(_context, (FloodfillNetworkDatabaseFacade) _context.clientNetDb(_client));
|
||||
Job j = _FDSMH.createJob(msg, null, null);
|
||||
j.runJob();
|
||||
if (sz > 0) {
|
||||
@@ -399,7 +399,7 @@ class InboundMessageDistributor implements GarlicMessageReceiver.CloveReceiver {
|
||||
// ToDo: This should actually have a try and catch.
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Store the LS in the correct dbid subDb: " + _client.toBase32());
|
||||
FloodfillDatabaseStoreMessageHandler _FDSMH = new FloodfillDatabaseStoreMessageHandler(_context, _context.clientNetDb(_client));
|
||||
FloodfillDatabaseStoreMessageHandler _FDSMH = new FloodfillDatabaseStoreMessageHandler(_context, (FloodfillNetworkDatabaseFacade) _context.clientNetDb(_client));
|
||||
Job j = _FDSMH.createJob(data, null, null);
|
||||
j.runJob();
|
||||
if (sz > 0) {
|
||||
|
||||
Reference in New Issue
Block a user