From 0efb0017e8c9fa2bee3f62b5969973d08d3cce58 Mon Sep 17 00:00:00 2001 From: zzz Date: Thu, 2 May 2024 16:57:50 -0400 Subject: [PATCH] Profiles: Fixes for firstHeardAbout and/or lastHeardAbout being zero --- .../src/net/i2p/router/peermanager/PeerProfile.java | 2 +- .../net/i2p/router/peermanager/ProfileManagerImpl.java | 1 + .../net/i2p/router/peermanager/ProfileOrganizer.java | 1 + .../router/peermanager/ProfilePersistenceHelper.java | 10 ++++++++-- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/router/java/src/net/i2p/router/peermanager/PeerProfile.java b/router/java/src/net/i2p/router/peermanager/PeerProfile.java index 4722ef9c7..794e6b46c 100644 --- a/router/java/src/net/i2p/router/peermanager/PeerProfile.java +++ b/router/java/src/net/i2p/router/peermanager/PeerProfile.java @@ -269,7 +269,7 @@ public class PeerProfile { * Also sets FirstHeardAbout if earlier */ public synchronized void setLastHeardAbout(long when) { - if (_lastHeardAbout <= 0 || when > _lastHeardAbout) + if (when > _lastHeardAbout) _lastHeardAbout = when; // this is called by netdb PersistentDataStore, so fixup first heard if (when < _firstHeardAbout) diff --git a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java index 8371169c9..81d187541 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java @@ -364,6 +364,7 @@ public class ProfileManagerImpl implements ProfileManager { PeerProfile prof = _context.profileOrganizer().getProfile(peer); if (prof == null) { prof = new PeerProfile(_context, peer); + prof.setLastHeardAbout(prof.getFirstHeardAbout()); _context.profileOrganizer().addProfile(prof); } return prof; diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index a6b126d97..a267253c7 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -218,6 +218,7 @@ public class ProfileOrganizer { if (rv != null) return rv; rv = new PeerProfile(_context, peer); + rv.setLastHeardAbout(rv.getFirstHeardAbout()); rv.coalesceStats(); if (!tryWriteLock()) return null; diff --git a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java index 4e93659db..60ebe19ad 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java +++ b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java @@ -325,8 +325,14 @@ class ProfilePersistenceHelper { profile.setIntegrationBonus((int) getLong(props, "integrationBonus")); profile.setSpeedBonus((int) getLong(props, "speedBonus")); - profile.setLastHeardAbout(getLong(props, "lastHeardAbout")); - profile.setFirstHeardAbout(getLong(props, "firstHeardAbout")); + long fh = getLong(props, "firstHeardAbout"); + if (fh <= 0) + fh = file.lastModified(); + profile.setFirstHeardAbout(fh); + long lh = getLong(props, "lastHeardAbout"); + if (lh <= 0) + lh = fh; + profile.setLastHeardAbout(lh); profile.setLastSendSuccessful(getLong(props, "lastSentToSuccessfully")); profile.setLastSendFailed(getLong(props, "lastFailedSend")); profile.setLastHeardFrom(getLong(props, "lastHeardFrom"));