rework discovery with methods

This commit is contained in:
Dmitriy Ryajov 2022-04-19 19:42:38 -06:00
parent 29d829d51c
commit a9cd7982fd
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
3 changed files with 32 additions and 17 deletions

View File

@ -260,8 +260,6 @@ proc requestBlock*(
it != blockPeer
)
debug "Requesting block from peer", providerCount = discovery.provides.len,
peer = discovery.provides[0], cid
# request block
b.network.request.sendWantList(
blockPeer.id,

View File

@ -8,18 +8,20 @@
## those terms.
import pkg/chronos
import pkg/chronicles
import pkg/libp2p
import pkg/questionable
import pkg/questionable/results
import pkg/stew/shims/net
import pkg/libp2pdht/discv5/protocol as discv5
import rng
import ./rng
import ./errors
export discv5
type
Discovery* = ref object
Discovery* = ref object of RootObj
protocol: discv5.Protocol
localInfo: PeerInfo
@ -55,15 +57,33 @@ proc toDiscoveryId*(cid: Cid): NodeId =
## To discovery id
readUintBE[256](keccak256.digest(cid.data.buffer).data)
proc findBlockProviders*(
method findBlockProviders*(
d: Discovery,
cid: Cid): Future[seq[SignedPeerRecord]] {.async.} =
return (await d.protocol.getProviders(cid.toDiscoveryId())).get()
cid: Cid): Future[seq[SignedPeerRecord]] {.async, base.} =
## Find block providers
##
proc publishProvide*(d: Discovery, cid: Cid) {.async.} =
let bid = cid.toDiscoveryId()
discard await d.protocol.addProvider(bid, d.localInfo.signedPeerRecord)
trace "Finding providers for block", cid = $cid
without providers =?
(await d.protocol.getProviders(cid.toDiscoveryId())).mapFailure, error:
trace "Error finding providers for block", cid = $cid, error = error.msg
return providers
method provideBlock*(d: Discovery, cid: Cid) {.async, base.} =
## Provide a bock Cid
##
trace "Providing block", cid = $cid
let
nodes = await d.protocol.addProvider(
cid.toDiscoveryId(),
d.localInfo.signedPeerRecord)
if nodes.len <= 0:
trace "Couldn't provide to any nodes!"
trace "Provided to nodes", nodes = nodes.len
proc start*(d: Discovery) {.async.} =
d.protocol.updateRecord(d.localInfo.signedPeerRecord).expect("updating SPR")

View File

@ -12,9 +12,7 @@ import pkg/libp2p
import pkg/questionable
import pkg/questionable/results
import pkg/stew/shims/net
import pkg/libp2pdht/discv5/protocol as discv5
export discv5
import pkg/dagger/discovery
type
MockDiscovery* = ref object of Discovery
@ -22,7 +20,7 @@ type
publishProvideHandler*: proc(d: MockDiscovery, cid: Cid) {.gcsafe.}
proc new*(
T: type Discovery,
T: type MockDiscovery,
localInfo: PeerInfo,
discoveryPort: Port,
bootstrapNodes = newSeq[SignedPeerRecord](),
@ -35,8 +33,8 @@ proc findPeer*(
peerId: PeerID): Future[?PeerRecord] {.async.} =
return none(PeerRecord)
proc findBlockProviders*(
d: Discovery,
method findBlockProviders*(
d: MockDiscovery,
cid: Cid): Future[seq[SignedPeerRecord]] {.async.} =
if isNil(d.findBlockProvidersHandler): return
@ -46,7 +44,6 @@ method provideBlock*(d: MockDiscovery, cid: Cid) {.async.} =
if isNil(d.publishProvideHandler): return
d.publishProvideHandler(d, cid)
proc start*(d: Discovery) {.async.} =
discard