NetDB: Type changes (Gitlab #402)

This commit is contained in:
zzz
2023-11-03 14:07:02 +00:00
parent db62206008
commit 7e8e0b60d0
14 changed files with 81 additions and 89 deletions

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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.
*/

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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>());

View File

@@ -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
*

View File

@@ -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) ) {

View File

@@ -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);

View File

@@ -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())

View File

@@ -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);

View File

@@ -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())

View File

@@ -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) {