diff --git a/router/java/src/net/i2p/router/ProfileManager.java b/router/java/src/net/i2p/router/ProfileManager.java index f829bdaeb4fbc20ad811e219fe327b2dedd4ce96..f861ab186192efea271220595f8d66e6e5d2ac46 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 16aa7dfb656cab5872f515a2d4f4deb2a4f24b34..abc78b855419c2be0308aad11d97015c1628783e 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 69088caaa7214d25be856e93e9113f6070c2b4a5..712a3cba65b643c4bcf71537c6ce69c98bf857a7 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