1
0
mirror of https://github.com/craigerl/aprsd.git synced 2026-05-16 22:32:10 -04:00

fix: filter stale BeaconPackets from PacketTrack on load from disk

Older versions persisted BeaconPackets to packettrack.json. On restart
these zombie beacons would be retransmitted by the scheduler. Now
PacketTrack.load() strips any BeaconPackets from the persisted data.

Workaround: delete ~/.config/aprsd/packettrack.json before restarting.
This commit is contained in:
Walter Boring 2026-05-13 12:14:21 -04:00
parent d3281cff0b
commit 0c515d45fe

View File

@ -114,6 +114,29 @@ class PacketTrack(objectstore.ObjectStoreMixin):
def remove(self, key):
self._remove(key)
def load(self):
"""Load tracked packets from disk, filtering out stale BeaconPackets.
BeaconPackets should never be retried (they are fire-and-forget),
but older versions persisted them to disk. Strip them on load so
they don't get retransmitted after a restart.
"""
super().load()
with self.lock:
stale = [
key
for key, pkt in self.data.items()
if isinstance(pkt, core.BeaconPacket)
or (isinstance(pkt, dict) and pkt.get('_type') == 'BeaconPacket')
]
for key in stale:
del self.data[key]
if stale:
LOG.info(
f'PacketTrack: removed {len(stale)} stale BeaconPacket(s) '
f'from persisted data.',
)
def _remove(self, key):
with self.lock:
try: