From 81e11efda19ef0b79e52a31aca2ec986108118ee Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 10 Jul 2024 09:40:13 -0400 Subject: [PATCH] proxy local timestamps in single proxy case as well as cluster case This is less efficient, but it guarantees that the timestamps that the client is sending are local timestamps, which turns out to be necessary for the HTTP PTP protocol server. --- P2P/Proxy.hs | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/P2P/Proxy.hs b/P2P/Proxy.hs index bdb0819072..eedc0c846d 100644 --- a/P2P/Proxy.hs +++ b/P2P/Proxy.hs @@ -349,18 +349,8 @@ proxy proxydone proxymethods proxystate servermode (ClientSide clientrunst clien _ <- client $ net $ sendMessage (ERROR "protocol error X") giveup "protocol error M" - -- When there is a single remote, reply with its timestamp, - -- to avoid needing timestamp translation. - handleGETTIMESTAMP (remoteside:[]) = do - liftIO $ atomically $ do - writeTVar (proxyRemoteLatestTimestamps proxystate) - mempty - writeTVar (proxyRemoteLatestLocalTimestamp proxystate) - Nothing - proxyresponse remoteside GETTIMESTAMP - (const proxynextclientmessage) - -- When there are multiple remotes, reply with our local timestamp, - -- and do timestamp translation when sending REMOVE-FROM. + -- Reply with our local timestamp, and do timestamp translation + -- when sending REMOVE-BEFORE. handleGETTIMESTAMP remotesides = do -- Order of getting timestamps matters. -- Getting the local time after the time of the remotes @@ -385,11 +375,11 @@ proxy proxydone proxymethods proxystate servermode (ClientSide clientrunst clien Just (remoteSideId r, ts) _ -> Nothing - proxyTimestamp ts _ _ Nothing = ts -- not proxying timestamps proxyTimestamp ts r tsm (Just correspondinglocaltime) = case M.lookup (remoteSideId r) tsm of Just oldts -> oldts + (ts - correspondinglocaltime) Nothing -> ts -- not reached + proxyTimestamp ts _ _ Nothing = ts -- not proxying timestamps handleREMOVE [] _ _ = -- When no places are provided to remove from, -- 2.30.2