From 76c1f47b20cf98f81bef75f17caa8be78a12a2dc Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Tue, 26 Jan 2010 19:52:06 +0000 Subject: [PATCH] * Profiles: Fix lack of profiles at router startup, especially for new routers --- router/java/src/net/i2p/router/ProfileManager.java | 1 + .../networkdb/kademlia/PersistentDataStore.java | 4 ++++ .../i2p/router/peermanager/ProfileManagerImpl.java | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/router/java/src/net/i2p/router/ProfileManager.java b/router/java/src/net/i2p/router/ProfileManager.java index f829bdaeb4..f861ab1861 100644 --- a/router/java/src/net/i2p/router/ProfileManager.java +++ b/router/java/src/net/i2p/router/ProfileManager.java @@ -155,6 +155,7 @@ public interface ProfileManager { * through an explicit dbStore or in a dbLookupReply */ void heardAbout(Hash peer); + void heardAbout(Hash peer, long when); /** * Note that the router received a message from the given peer on the specified diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java index 16aa7dfb65..abc78b8554 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java @@ -411,6 +411,10 @@ class PersistentDataStore extends TransientDataStore { try { // persist = false so we don't write what we just read _facade.store(ri.getIdentity().getHash(), ri, false); + // when heardAbout() was removed from TransientDataStore, it broke + // profile bootstrapping for new routers, + // so add it here. + getContext().profileManager().heardAbout(ri.getIdentity().getHash(), ri.getPublished()); } catch (IllegalArgumentException iae) { _log.info("Refused locally loaded routerInfo - deleting"); corrupt = true; diff --git a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java index 69088caaa7..712a3cba65 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java @@ -311,6 +311,17 @@ public class ProfileManagerImpl implements ProfileManager { if (data == null) return; data.setLastHeardAbout(_context.clock().now()); } + + /** + * Note that the local router received a reference to the given peer + * at a certain time. Only update the time if newer. + */ + public void heardAbout(Hash peer, long when) { + PeerProfile data = getProfile(peer); + if (data == null) return; + if (when > data.getLastHeardAbout()) + data.setLastHeardAbout(when); + } /** * Note that the router received a message from the given peer on the specified -- GitLab