Skip to content

Commit b294755

Browse files
rvaggmvdanhannahhoward
authored
[Feature] UUIDs, protocol versioning, v2 protocol w/ dag-cbor messaging (#332)
* feat(net): initial dag-cbor protocol support also added first roundtrip benchmark * feat(requestid): use uuids for requestids Ref: ipfs/go-graphsync#278 Closes: ipfs/go-graphsync#279 Closes: ipfs/go-graphsync#281 * fix(requestmanager): make collect test requests with uuids sortable * fix(requestid): print requestids as string uuids in logs * fix(requestid): use string as base type for RequestId * chore(requestid): wrap requestid string in a struct * feat(libp2p): add v1.0.0 network compatibility * chore(net): resolve most cbor + uuid merge problems * feat(net): to/from ipld bindnode types, more cbor protoc improvements * feat(net): introduce 2.0.0 protocol for dag-cbor * fix(net): more bindnode dag-cbor protocol fixes Not quite working yet, still need some upstream fixes and no extensions work has been attempted yet. * chore(metadata): convert metadata to bindnode * chore(net,extensions): wire up IPLD extensions, expose as Node instead of []byte * Extensions now working with new dag-cbor network protocol * dag-cbor network protocol still not default, most tests are still exercising the existing v1 protocol * Metadata now using bindnode instead of cbor-gen * []byte for deferred extensions decoding is now replaced with datamodel.Node everywhere. Internal extensions now using some form of go-ipld-prime decode to convert them to local types (metadata using bindnode, others using direct inspection). * V1 protocol also using dag-cbor decode of extensions data and exporting the bytes - this may be a breaking change for exising extensions - need to check whether this should be done differently. Maybe a try-decode and if it fails export a wrapped Bytes Node? * fix(src): fix imports * fix(mod): clean up go.mod * fix(net): refactor message version format code to separate packages * feat(net): activate v2 network as default * fix(src): build error * chore: remove GraphSyncMessage#Loggable Ref: ipfs/go-graphsync#332 (comment) * chore: remove intermediate v1.1 pb protocol message type v1.1.0 was introduced to start the transition to UUID RequestIDs. That change has since been combined with the switch to DAG-CBOR messaging format for a v2.0.0 protocol. Thus, this interim v1.1.0 format is no longer needed and has not been used at all in a released version of go-graphsync. Fixes: filecoin-project/lightning-planning#14 * fix: clarify comments re dag-cbor extension data As per dission in ipfs/go-graphsync#338, we are going to be erroring on extension data that is not properly dag-cbor encoded from now on * feat: new LinkMetadata iface, integrate metadata into Response type (#342) * feat(metadata): new LinkMetadata iface, integrate metadata into Response type * LinkMetadata wrapper around existing metadata type to allow for easier backward-compat upgrade path * integrate metadata directly into GraphSyncResponse type, moving it from an optional extension * still deal with metadata as an extension for now—further work for v2 protocol will move it into the core message schema Ref: ipfs/go-graphsync#335 * feat(metadata): move metadata to core protocol, only use extension in v1 proto * fix(metadata): bindnode expects Go enum strings to be at the type level * fix(metadata): minor fixes, tidy up naming * fix(metadata): make gofmt and staticcheck happy * fix(metadata): docs and minor tweaks after review Co-authored-by: Daniel Martí <[email protected]> * fix: avoid double-encode for extension size estimation Closes: filecoin-project/lightning-planning#15 * feat(requesttype): introduce RequestType enum to replace cancel&update bools (#352) Closes: ipfs/go-graphsync#345 * fix(metadata): extend round-trip tests to byte representation (#350) * feat!(messagev2): tweak dag-cbor message schema (#354) * feat!(messagev2): tweak dag-cbor message schema For: 1. Efficiency: compacting the noisy structures into tuples representations and making top-level components of a message optional. 2. Migrations: providing a secondary mechanism to lean on for versioning if we want a gentler upgrade path than libp2p protocol versioning. Closes: ipfs/go-graphsync#351 * fix(messagev2): adjust schema per feedback * feat(graphsync): unify req & resp Pause, Unpause & Cancel by RequestID (#355) * feat(graphsync): unify req & resp Pause, Unpause & Cancel by RequestID Closes: ipfs/go-graphsync#349 * fixup! feat(graphsync): unify req & resp Pause, Unpause & Cancel by RequestID * fixup! feat(graphsync): unify req & resp Pause, Unpause & Cancel by RequestID when using error type T, use *T with As, rather than **T * fixup! feat(graphsync): unify req & resp Pause, Unpause & Cancel by RequestID * fixup! feat(graphsync): unify req & resp Pause, Unpause & Cancel by RequestID Co-authored-by: Daniel Martí <[email protected]> * feat: SendUpdates() API to send only extension data to via existing request * fix(responsemanager): send update while completing If request has finished selector traversal but is still sending blocks, I think it should be possible to send updates. As a side effect, this fixes our race. Logically, this makes sense, cause our external indicator that we're done (completed response listener) has not been called. * fix(requestmanager): revert change to pointer type * Refactor async loading for simplicity and correctness (#356) * feat(reconciledloader): first working version of reconciled loader * feat(traversalrecorder): add better recorder for traversals * feat(reconciledloader): pipe reconciled loader through code style(lint): fix static checks * Update requestmanager/reconciledloader/injest.go Co-authored-by: Rod Vagg <[email protected]> * feat(reconciledloader): respond to PR comments Co-authored-by: Rod Vagg <[email protected]> * fix(requestmanager): update test for rebase Co-authored-by: Daniel Martí <[email protected]> Co-authored-by: hannahhoward <[email protected]>
1 parent 564683c commit b294755

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

peermanager/peermessagemanager_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func TestSendingMessagesToPeers(t *testing.T) {
6767

6868
tp := testutil.GeneratePeers(5)
6969

70-
id := graphsync.RequestID(rand.Int31())
70+
id := graphsync.NewRequestID()
7171
priority := graphsync.Priority(rand.Int31())
7272
root := testutil.GenerateCids(1)[0]
7373
ssb := builder.NewSelectorSpecBuilder(basicnode.Prototype.Any)
@@ -82,7 +82,7 @@ func TestSendingMessagesToPeers(t *testing.T) {
8282
peerManager.AllocateAndBuildMessage(tp[1], 0, func(b *messagequeue.Builder) {
8383
b.AddRequest(request)
8484
})
85-
cancelRequest := gsmsg.CancelRequest(id)
85+
cancelRequest := gsmsg.NewCancelRequest(id)
8686
peerManager.AllocateAndBuildMessage(tp[0], 0, func(b *messagequeue.Builder) {
8787
b.AddRequest(cancelRequest)
8888
})
@@ -92,7 +92,7 @@ func TestSendingMessagesToPeers(t *testing.T) {
9292
require.Equal(t, tp[0], firstMessage.p, "first message sent to incorrect peer")
9393
request = firstMessage.message.Requests()[0]
9494
require.Equal(t, id, request.ID())
95-
require.False(t, request.IsCancel())
95+
require.Equal(t, request.Type(), graphsync.RequestTypeNew)
9696
require.Equal(t, priority, request.Priority())
9797
require.Equal(t, selector, request.Selector())
9898

@@ -101,7 +101,7 @@ func TestSendingMessagesToPeers(t *testing.T) {
101101
require.Equal(t, tp[1], secondMessage.p, "second message sent to incorrect peer")
102102
request = secondMessage.message.Requests()[0]
103103
require.Equal(t, id, request.ID())
104-
require.False(t, request.IsCancel())
104+
require.Equal(t, request.Type(), graphsync.RequestTypeNew)
105105
require.Equal(t, priority, request.Priority())
106106
require.Equal(t, selector, request.Selector())
107107

@@ -111,7 +111,7 @@ func TestSendingMessagesToPeers(t *testing.T) {
111111
require.Equal(t, tp[0], thirdMessage.p, "third message sent to incorrect peer")
112112
request = thirdMessage.message.Requests()[0]
113113
require.Equal(t, id, request.ID())
114-
require.True(t, request.IsCancel())
114+
require.Equal(t, request.Type(), graphsync.RequestTypeCancel)
115115

116116
connectedPeers := peerManager.ConnectedPeers()
117117
require.Len(t, connectedPeers, 2)

0 commit comments

Comments
 (0)