diff --git a/src/Hash2Pub/DHTProtocol.hs b/src/Hash2Pub/DHTProtocol.hs index 459a4c1..bfcdf9e 100644 --- a/src/Hash2Pub/DHTProtocol.hs +++ b/src/Hash2Pub/DHTProtocol.hs @@ -527,6 +527,9 @@ requestStabilise ns neighbour = do ,maybe succAcc (++ succAcc) (stabiliseSuccessors <$> payload msg)) ) ([],[]) respSet + -- update successfully responded neighbour in cache + now <- getPOSIXTime + maybe (pure ()) (\p -> queueAddEntries (Identity $ RemoteCacheEntry (sender p) now) ns) $ headMay (Set.elems respSet) pure $ if null responsePreds && null responseSuccs then Left "no neighbours returned" else Right (responsePreds, responseSuccs) diff --git a/src/Hash2Pub/FediChord.hs b/src/Hash2Pub/FediChord.hs index 1b1f808..b013bdc 100644 --- a/src/Hash2Pub/FediChord.hs +++ b/src/Hash2Pub/FediChord.hs @@ -217,8 +217,8 @@ stabiliseThread nsSTM = forever $ do newNs = setPredecessors newPreds . setSuccessors newSuccs $ newerNsSnap writeTVar nsSTM newNs pure newNs - - -- TODO: update successfully stabilised nodes in cache + -- delete unresponding nodes from cache as well + mapM_ (atomically . writeTQueue (cacheWriteQueue updatedNs) . deleteCacheEntry . getNid) allDeletes -- try looking up additional neighbours if list too short forM_ [(length $ predecessors updatedNs)..(kNeighbours updatedNs)] (\_ -> do