mirror of
https://github.com/logos-storage/logos-storage-nim-dht.git
synced 2026-01-05 23:13:10 +00:00
add transport level RTT measurement
Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
This commit is contained in:
parent
0b69de242f
commit
ec4f0d4a84
@ -25,7 +25,7 @@ type
|
|||||||
client: Client
|
client: Client
|
||||||
bindAddress: Address ## UDP binding address
|
bindAddress: Address ## UDP binding address
|
||||||
transp: DatagramTransport
|
transp: DatagramTransport
|
||||||
pendingRequests: Table[AESGCMNonce, PendingRequest]
|
pendingRequests: Table[AESGCMNonce, (PendingRequest, Moment)]
|
||||||
keyexchangeInProgress: HashSet[NodeId]
|
keyexchangeInProgress: HashSet[NodeId]
|
||||||
pendingRequestsByNode: Table[NodeId, seq[seq[byte]]]
|
pendingRequestsByNode: Table[NodeId, seq[seq[byte]]]
|
||||||
codec*: Codec
|
codec*: Codec
|
||||||
@ -70,7 +70,7 @@ proc sendMessage*(t: Transport, toId: NodeId, toAddr: Address, message: seq[byte
|
|||||||
proc registerRequest(t: Transport, n: Node, message: seq[byte],
|
proc registerRequest(t: Transport, n: Node, message: seq[byte],
|
||||||
nonce: AESGCMNonce) =
|
nonce: AESGCMNonce) =
|
||||||
let request = PendingRequest(node: n, message: message)
|
let request = PendingRequest(node: n, message: message)
|
||||||
if not t.pendingRequests.hasKeyOrPut(nonce, request):
|
if not t.pendingRequests.hasKeyOrPut(nonce, (request, Moment.now())):
|
||||||
sleepAsync(responseTimeout).addCallback() do(data: pointer):
|
sleepAsync(responseTimeout).addCallback() do(data: pointer):
|
||||||
t.pendingRequests.del(nonce)
|
t.pendingRequests.del(nonce)
|
||||||
|
|
||||||
@ -165,9 +165,16 @@ proc receive*(t: Transport, a: Address, packet: openArray[byte]) =
|
|||||||
|
|
||||||
of Flag.Whoareyou:
|
of Flag.Whoareyou:
|
||||||
trace "Received whoareyou packet", myport = t.bindAddress.port, address = a
|
trace "Received whoareyou packet", myport = t.bindAddress.port, address = a
|
||||||
var pr: PendingRequest
|
var
|
||||||
if t.pendingRequests.take(packet.whoareyou.requestNonce, pr):
|
prt: (PendingRequest, Moment)
|
||||||
let toNode = pr.node
|
if t.pendingRequests.take(packet.whoareyou.requestNonce, prt):
|
||||||
|
let
|
||||||
|
pr = prt[0]
|
||||||
|
startTime = prt[1]
|
||||||
|
toNode = pr.node
|
||||||
|
rtt = Moment.now() - startTime
|
||||||
|
# trace "whoareyou RTT:", rtt, node = toNode
|
||||||
|
toNode.registerRtt(rtt)
|
||||||
# This is a node we previously contacted and thus must have an address.
|
# This is a node we previously contacted and thus must have an address.
|
||||||
doAssert(toNode.address.isSome())
|
doAssert(toNode.address.isSome())
|
||||||
let address = toNode.address.get()
|
let address = toNode.address.get()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user