Skip to content

Commit c62cbbd

Browse files
committed
feat(net): introduce 2.0.0 protocol for dag-cbor
1 parent dd9bf75 commit c62cbbd

9 files changed

Lines changed: 174 additions & 136 deletions

File tree

benchmarks/testnet/virtual.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func (n *network) SendMessage(
137137
rateLimiters[to] = rateLimiter
138138
}
139139

140-
pbMsg, err := gsmsg.NewMessageHandler().ToProto(mes)
140+
pbMsg, err := gsmsg.NewMessageHandler().ToProtoV11(mes)
141141
if err != nil {
142142
return err
143143
}

message/bench_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func BenchmarkMessageEncodingRoundtrip(b *testing.B) {
7373
for pb.Next() {
7474
buf.Reset()
7575

76-
ipldGSM, err := gsm.ToIPLD()
76+
ipldGSM, err := NewMessageHandler().ToIPLD(gsm)
7777
require.NoError(b, err)
7878
node := bindnode.Wrap(ipldGSM, ipldbind.Prototype.Message.Type())
7979
err = dagcbor.Encode(node.Representation(), buf)
@@ -84,7 +84,7 @@ func BenchmarkMessageEncodingRoundtrip(b *testing.B) {
8484
require.NoError(b, err)
8585
node2 := builder.Build()
8686
ipldGSM2 := bindnode.Unwrap(node2).(*ipldbind.GraphSyncMessage)
87-
gsm2, err := messageFromIPLD(ipldGSM2)
87+
gsm2, err := NewMessageHandler().messageFromIPLD(ipldGSM2)
8888
require.NoError(b, err)
8989

9090
// same as above.

message/ipldbind/message.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ type GraphSyncRequest struct {
5050
Id []byte
5151

5252
Root cid.Cid
53-
Selector ipld.Node
53+
Selector *ipld.Node
5454
Extensions GraphSyncExtensions
5555
Priority graphsync.Priority
5656
Cancel bool

message/ipldbind/schema.ipldsch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type GraphSyncResponseStatusCode enum {
3737
type GraphSyncRequest struct {
3838
id GraphSyncRequestID (rename "ID") # unique id set on the requester side
3939
root Link (rename "Root") # a CID for the root node in the query
40-
selector Any (rename "Sel") # see https://github.com/ipld/specs/blob/master/selectors/selectors.md
40+
selector nullable Any (rename "Sel") # see https://github.com/ipld/specs/blob/master/selectors/selectors.md
4141
extensions GraphSyncExtensions (rename "Ext") # side channel information
4242
priority GraphSyncPriority (rename "Pri") # the priority (normalized). default to 1
4343
cancel Bool (rename "Canc") # whether this cancels a request

message/message.go

Lines changed: 9 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package message
33
import (
44
"bytes"
55
"fmt"
6-
"io"
76
"strings"
87

98
blocks "github.com/ipfs/go-block-format"
@@ -12,37 +11,8 @@ import (
1211
"github.com/ipld/go-ipld-prime/codec/dagjson"
1312

1413
"github.com/ipfs/go-graphsync"
15-
"github.com/ipfs/go-graphsync/message/ipldbind"
16-
pb "github.com/ipfs/go-graphsync/message/pb"
1714
)
1815

19-
// IsTerminalSuccessCode returns true if the response code indicates the
20-
// request terminated successfully.
21-
// DEPRECATED: use status.IsSuccess()
22-
func IsTerminalSuccessCode(status graphsync.ResponseStatusCode) bool {
23-
return status.IsSuccess()
24-
}
25-
26-
// IsTerminalFailureCode returns true if the response code indicates the
27-
// request terminated in failure.
28-
// DEPRECATED: use status.IsFailure()
29-
func IsTerminalFailureCode(status graphsync.ResponseStatusCode) bool {
30-
return status.IsFailure()
31-
}
32-
33-
// IsTerminalResponseCode returns true if the response code signals
34-
// the end of the request
35-
// DEPRECATED: use status.IsTerminal()
36-
func IsTerminalResponseCode(status graphsync.ResponseStatusCode) bool {
37-
return status.IsTerminal()
38-
}
39-
40-
// Exportable is an interface that can serialize to a protobuf
41-
type Exportable interface {
42-
ToProto() (*pb.Message, error)
43-
ToNet(w io.Writer) error
44-
}
45-
4616
// GraphSyncRequest is a struct to capture data on a request contained in a
4717
// GraphSyncMessage.
4818
type GraphSyncRequest struct {
@@ -57,11 +27,15 @@ type GraphSyncRequest struct {
5727

5828
// String returns a human-readable form of a GraphSyncRequest
5929
func (gsr GraphSyncRequest) String() string {
60-
var buf bytes.Buffer
61-
dagjson.Encode(gsr.selector, &buf)
30+
sel := "nil"
31+
if gsr.selector != nil {
32+
var buf bytes.Buffer
33+
dagjson.Encode(gsr.selector, &buf)
34+
sel = buf.String()
35+
}
6236
return fmt.Sprintf("GraphSyncRequest<root=%s, selector=%s, priority=%d, id=%s, cancel=%v, update=%v, exts=%s>",
6337
gsr.root.String(),
64-
buf.String(),
38+
sel,
6539
gsr.priority,
6640
gsr.id.String(),
6741
gsr.isCancel,
@@ -99,7 +73,8 @@ type GraphSyncMessage struct {
9973
// its contents
10074
func (gsm GraphSyncMessage) String() string {
10175
cts := make([]string, 0)
102-
for _, req := range gsm.requests {
76+
for i, req := range gsm.requests {
77+
fmt.Printf("req.String(%v)\n", i)
10378
cts = append(cts, req.String())
10479
}
10580
for _, resp := range gsm.responses {
@@ -213,87 +188,6 @@ func (gsm GraphSyncMessage) Blocks() []blocks.Block {
213188
return bs
214189
}
215190

216-
func (gsm GraphSyncMessage) ToIPLD() (*ipldbind.GraphSyncMessage, error) {
217-
ibm := new(ipldbind.GraphSyncMessage)
218-
ibm.Requests = make([]ipldbind.GraphSyncRequest, 0, len(gsm.requests))
219-
for _, request := range gsm.requests {
220-
ibm.Requests = append(ibm.Requests, ipldbind.GraphSyncRequest{
221-
Id: request.id.Bytes(),
222-
Root: request.root,
223-
Selector: request.selector,
224-
Priority: request.priority,
225-
Cancel: request.isCancel,
226-
Update: request.isUpdate,
227-
// Extensions: request.extensions,
228-
})
229-
}
230-
231-
ibm.Responses = make([]ipldbind.GraphSyncResponse, 0, len(gsm.responses))
232-
for _, response := range gsm.responses {
233-
ibm.Responses = append(ibm.Responses, ipldbind.GraphSyncResponse{
234-
Id: response.requestID.Bytes(),
235-
Status: response.status,
236-
// Extensions: response.extensions,
237-
})
238-
}
239-
240-
blocks := gsm.Blocks()
241-
ibm.Blocks = make([]ipldbind.GraphSyncBlock, 0, len(blocks))
242-
for _, b := range blocks {
243-
ibm.Blocks = append(ibm.Blocks, ipldbind.GraphSyncBlock{
244-
Data: b.RawData(),
245-
Prefix: b.Cid().Prefix().Bytes(),
246-
})
247-
}
248-
return ibm, nil
249-
}
250-
251-
func messageFromIPLD(ibm *ipldbind.GraphSyncMessage) (GraphSyncMessage, error) {
252-
requests := make(map[graphsync.RequestID]GraphSyncRequest, len(ibm.Requests))
253-
for _, req := range ibm.Requests {
254-
// exts := req.Extensions
255-
id, err := graphsync.ParseRequestID(req.Id)
256-
if err != nil {
257-
return GraphSyncMessage{}, err
258-
}
259-
requests[id] = newRequest(id, req.Root, req.Selector, graphsync.Priority(req.Priority), req.Cancel, req.Update, nil)
260-
}
261-
262-
responses := make(map[graphsync.RequestID]GraphSyncResponse, len(ibm.Responses))
263-
for _, res := range ibm.Responses {
264-
// exts := res.Extensions
265-
id, err := graphsync.ParseRequestID(res.Id)
266-
if err != nil {
267-
return GraphSyncMessage{}, err
268-
}
269-
responses[id] = newResponse(id, graphsync.ResponseStatusCode(res.Status), nil)
270-
}
271-
272-
blks := make(map[cid.Cid]blocks.Block, len(ibm.Blocks))
273-
for _, b := range ibm.Blocks {
274-
pref, err := cid.PrefixFromBytes(b.Prefix)
275-
if err != nil {
276-
return GraphSyncMessage{}, err
277-
}
278-
279-
c, err := pref.Sum(b.Data)
280-
if err != nil {
281-
return GraphSyncMessage{}, err
282-
}
283-
284-
blk, err := blocks.NewBlockWithCid(b.Data, c)
285-
if err != nil {
286-
return GraphSyncMessage{}, err
287-
}
288-
289-
blks[blk.Cid()] = blk
290-
}
291-
292-
return GraphSyncMessage{
293-
requests, responses, blks,
294-
}, nil
295-
}
296-
297191
func (gsm GraphSyncMessage) Loggable() map[string]interface{} {
298192
requests := make([]string, 0, len(gsm.requests))
299193
for _, request := range gsm.requests {

message/message_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestAppendingRequests(t *testing.T) {
4545
require.True(t, found)
4646
require.Equal(t, extension.Data, extensionData)
4747

48-
pbMessage, err := NewMessageHandler().ToProto(gsm)
48+
pbMessage, err := NewMessageHandler().ToProtoV11(gsm)
4949
require.NoError(t, err, "serialize to protobuf errored")
5050
selectorEncoded, err := ipldutil.EncodeNode(selector)
5151
require.NoError(t, err)
@@ -59,7 +59,7 @@ func TestAppendingRequests(t *testing.T) {
5959
require.Equal(t, selectorEncoded, pbRequest.Selector)
6060
require.Equal(t, map[string][]byte{"graphsync/awesome": extension.Data}, pbRequest.Extensions)
6161

62-
deserialized, err := NewMessageHandler().newMessageFromProto(pbMessage)
62+
deserialized, err := NewMessageHandler().newMessageFromProtoV11(pbMessage)
6363
require.NoError(t, err, "deserializing protobuf message errored")
6464
deserializedRequests := deserialized.Requests()
6565
require.Len(t, deserializedRequests, 1, "did not add request to deserialized message")
@@ -99,14 +99,14 @@ func TestAppendingResponses(t *testing.T) {
9999
require.True(t, found)
100100
require.Equal(t, extension.Data, extensionData)
101101

102-
pbMessage, err := NewMessageHandler().ToProto(gsm)
102+
pbMessage, err := NewMessageHandler().ToProtoV11(gsm)
103103
require.NoError(t, err, "serialize to protobuf errored")
104104
pbResponse := pbMessage.Responses[0]
105105
require.Equal(t, requestID.Bytes(), pbResponse.Id)
106106
require.Equal(t, int32(status), pbResponse.Status)
107107
require.Equal(t, extension.Data, pbResponse.Extensions["graphsync/awesome"])
108108

109-
deserialized, err := NewMessageHandler().newMessageFromProto(pbMessage)
109+
deserialized, err := NewMessageHandler().newMessageFromProtoV11(pbMessage)
110110
require.NoError(t, err, "deserializing protobuf message errored")
111111
deserializedResponses := deserialized.Responses()
112112
require.Len(t, deserializedResponses, 1, "did not add response to deserialized message")
@@ -132,7 +132,7 @@ func TestAppendBlock(t *testing.T) {
132132
m, err := builder.Build()
133133
require.NoError(t, err)
134134

135-
pbMessage, err := NewMessageHandler().ToProto(m)
135+
pbMessage, err := NewMessageHandler().ToProtoV11(m)
136136
require.NoError(t, err, "serializing to protobuf errored")
137137

138138
// assert strings are in proto message

0 commit comments

Comments
 (0)