diff --git a/FediChord.asn1 b/FediChord.asn1 index eb31730..ce5ea9e 100644 --- a/FediChord.asn1 +++ b/FediChord.asn1 @@ -104,13 +104,13 @@ PingRequestPayload ::= NULL -- do not include a node/ vserver ID, so that PingResponsePayload ::= SEQUENCE OF NodeState LoadRequestPayload ::= SEQUENCE { - lowerBound NodeID, - upperBound NodeID + upperSegmentBound NodeID } LoadResponsePayload ::= SEQUENCE { loadSum REAL, - remainingLoadTarget REAL + remainingLoadTarget REAL, + lowerBound NodeID } END diff --git a/src/Hash2Pub/ASN1Coding.hs b/src/Hash2Pub/ASN1Coding.hs index e29863e..e5efdad 100644 --- a/src/Hash2Pub/ASN1Coding.hs +++ b/src/Hash2Pub/ASN1Coding.hs @@ -186,14 +186,14 @@ encodePayload payload'@PingResponsePayload{} = <> [End Sequence] encodePayload payload'@LoadRequestPayload{} = [ Start Sequence - , IntVal . getNodeID $ loadLowerBound payload' - , IntVal . getNodeID $ loadUpperBound payload' + , IntVal . getNodeID $ loadSegmentUpperBound payload' , End Sequence ] encodePayload payload'@LoadResponsePayload{} = [ Start Sequence , Real $ loadSum payload' , Real $ loadRemainingTarget payload' + , IntVal . getNodeID $ loadSegmentLowerBound payload' , End Sequence ] @@ -461,19 +461,19 @@ parsePingResponsePayload = onNextContainer Sequence $ do parseLoadRequestPayload :: ParseASN1 ActionPayload parseLoadRequestPayload = onNextContainer Sequence $ do - loadLowerBound' <- fromInteger <$> parseInteger loadUpperBound' <- fromInteger <$> parseInteger pure LoadRequestPayload - { loadLowerBound = loadLowerBound' - , loadUpperBound = loadUpperBound' + { loadSegmentUpperBound = loadUpperBound' } parseLoadResponsePayload :: ParseASN1 ActionPayload parseLoadResponsePayload = onNextContainer Sequence $ do loadSum' <- parseReal loadRemainingTarget' <- parseReal + loadSegmentLowerBound' <- fromInteger <$> parseInteger pure LoadResponsePayload { loadSum = loadSum' , loadRemainingTarget = loadRemainingTarget' + , loadSegmentLowerBound = loadSegmentLowerBound' } diff --git a/src/Hash2Pub/DHTProtocol.hs b/src/Hash2Pub/DHTProtocol.hs index 37a1dea..0b3e7ae 100644 --- a/src/Hash2Pub/DHTProtocol.hs +++ b/src/Hash2Pub/DHTProtocol.hs @@ -751,16 +751,14 @@ requestPing ns target = do requestQueryLoad :: (MonadError String m, MonadIO m) => LocalNodeState s -> NodeID - -> NodeID -> RemoteNodeState -> m SegmentLoadStats -requestQueryLoad ns lowerIdBound upperIdBound target = do +requestQueryLoad ns upperIdBound target = do nodeConf <- nodeConfig <$> liftIO (readTVarIO $ parentRealNode ns) let srcAddr = confIP nodeConf - loadPl = LoadRequestPayload - { loadLowerBound = lowerIdBound - , loadUpperBound = upperIdBound + loadReqPl = LoadRequestPayload + { loadSegmentUpperBound = upperIdBound } responses <- liftIO $ bracket (mkSendSocket srcAddr (getDomain target) (getDhtPort target)) close (fmap Right . sendRequestTo (confRequestTimeout nodeConf) (confRequestRetries nodeConf) (\rid -> @@ -770,13 +768,13 @@ requestQueryLoad ns lowerIdBound upperIdBound target = do , part = 1 , isFinalPart = False , action = QueryLoad - , payload = Just loadPl + , payload = Just loadReqPl } ) ) `catch` (\e -> pure . Left $ displayException (e :: IOException)) responseMsgSet <- liftEither responses -- throws an error if an exception happened - loadPl <- maybe (throwError "no load response payload found") pure + loadResPl <- maybe (throwError "no load response payload found") pure (foldr' (\msg acc -> case payload msg of -- just extract the first found LoadResponsePayload Just pl@LoadResponsePayload{} | isNothing acc -> Just pl @@ -786,10 +784,10 @@ requestQueryLoad ns lowerIdBound upperIdBound target = do responseMsgSet ) pure SegmentLoadStats - { segmentLowerKeyBound = lowerIdBound + { segmentLowerKeyBound = loadSegmentLowerBound loadResPl , segmentUpperKeyBound = upperIdBound - , segmentLoad = loadSum loadPl - , segmentOwnerLoadTarget = loadRemainingTarget loadPl + , segmentLoad = loadSum loadResPl + , segmentOwnerLoadTarget = loadRemainingTarget loadResPl } diff --git a/src/Hash2Pub/ProtocolTypes.hs b/src/Hash2Pub/ProtocolTypes.hs index e7f1e3c..03a2d19 100644 --- a/src/Hash2Pub/ProtocolTypes.hs +++ b/src/Hash2Pub/ProtocolTypes.hs @@ -58,6 +58,10 @@ data ActionPayload = QueryIDRequestPayload } | StabiliseRequestPayload | PingRequestPayload + | LoadRequestPayload + { loadSegmentUpperBound :: NodeID + -- ^ upper bound of segment interested in, + } | QueryIDResponsePayload { queryResult :: QueryResponse } @@ -74,13 +78,10 @@ data ActionPayload = QueryIDRequestPayload | PingResponsePayload { pingNodeStates :: [RemoteNodeState] } - | LoadRequestPayload - { loadLowerBound :: NodeID - , loadUpperBound :: NodeID - } | LoadResponsePayload - { loadSum :: Double - , loadRemainingTarget :: Double + { loadSum :: Double + , loadRemainingTarget :: Double + , loadSegmentLowerBound :: NodeID } deriving (Show, Eq) diff --git a/test/FediChordSpec.hs b/test/FediChordSpec.hs index 8756b69..8983ca4 100644 --- a/test/FediChordSpec.hs +++ b/test/FediChordSpec.hs @@ -222,12 +222,12 @@ spec = do ] } qLoadReqPayload = LoadRequestPayload - { loadLowerBound = fromInteger 12 - , loadUpperBound = fromInteger 1025 + { loadSegmentUpperBound = 1025 } qLoadResPayload = LoadResponsePayload { loadSum = 3.141 , loadRemainingTarget = -1.337 + , loadSegmentLowerBound = 12 } requestTemplate = Request { requestID = 2342