Skip to content

Commit 1f7cb30

Browse files
committed
TMP: iterate toward working bindnode
1 parent ea4a06a commit 1f7cb30

4 files changed

Lines changed: 37 additions & 22 deletions

File tree

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 := NewMessageHandler().ToIPLD(gsm)
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 := NewMessageHandler().messageFromIPLD(ipldGSM2)
87+
gsm2, err := NewMessageHandler().fromIPLD(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
@@ -49,7 +49,7 @@ type GraphSyncExtensions struct {
4949
type GraphSyncRequest struct {
5050
Id []byte
5151

52-
Root cid.Cid
52+
Root *cid.Cid
5353
Selector *ipld.Node
5454
Extensions GraphSyncExtensions
5555
Priority graphsync.Priority

message/ipldbind/schema.ipldsch

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ type GraphSyncResponseStatusCode enum {
3535
} representation int
3636

3737
type GraphSyncRequest struct {
38-
id GraphSyncRequestID (rename "ID") # unique id set on the requester side
39-
root Link (rename "Root") # a CID for the root node in the query
40-
selector nullable Any (rename "Sel") # see https://github.com/ipld/specs/blob/master/selectors/selectors.md
41-
extensions GraphSyncExtensions (rename "Ext") # side channel information
42-
priority GraphSyncPriority (rename "Pri") # the priority (normalized). default to 1
43-
cancel Bool (rename "Canc") # whether this cancels a request
44-
update Bool (rename "Updt") # whether this is an update to an in progress request
38+
id GraphSyncRequestID (rename "ID") # unique id set on the requester side
39+
root optional Link (rename "Root") # a CID for the root node in the query
40+
selector optional Any (rename "Sel") # see https://github.com/ipld/specs/blob/master/selectors/selectors.md
41+
extensions GraphSyncExtensions (rename "Ext") # side channel information
42+
priority GraphSyncPriority (rename "Pri") # the priority (normalized). default to 1
43+
cancel Bool (rename "Canc") # whether this cancels a request
44+
update Bool (rename "Updt") # whether this is an update to an in progress request
4545
} representation map
4646

4747
type GraphSyncResponse struct {

message/messagehandler.go

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package message
33
import (
44
"bytes"
55
"encoding/binary"
6+
"encoding/hex"
67
"errors"
78
"fmt"
89
"io"
@@ -49,7 +50,7 @@ func NewMessageHandler() *MessageHandler {
4950
// FromNet can read a network stream to deserialized a GraphSyncMessage
5051
func (mh *MessageHandler) FromNet(r io.Reader) (GraphSyncMessage, error) {
5152
reader := msgio.NewVarintReaderSize(r, network.MessageSizeMax)
52-
return mh.FromMsgReaderV11(reader)
53+
return mh.FromMsgReader(reader)
5354
}
5455

5556
// FromMsgReader can deserialize a DAG-CBOR message into a GraphySyncMessage
@@ -60,14 +61,16 @@ func (mh *MessageHandler) FromMsgReader(r msgio.Reader) (GraphSyncMessage, error
6061
}
6162

6263
builder := ipldbind.Prototype.Message.Representation().NewBuilder()
64+
fmt.Println(hex.EncodeToString(msg))
6365
err = dagcbor.Decode(builder, bytes.NewReader(msg))
6466
if err != nil {
67+
fmt.Printf("dagcbor decode error %v", err)
6568
return GraphSyncMessage{}, err
6669
}
6770

6871
node := builder.Build()
6972
ipldGSM := bindnode.Unwrap(node).(*ipldbind.GraphSyncMessage)
70-
return mh.messageFromIPLD(ipldGSM)
73+
return mh.fromIPLD(ipldGSM)
7174
}
7275

7376
// FromMsgReaderV11 can deserialize a protobuf message into a GraphySyncMessage
@@ -105,14 +108,22 @@ func (mh *MessageHandler) FromMsgReaderV1(p peer.ID, r msgio.Reader) (GraphSyncM
105108
}
106109

107110
// ToProto converts a GraphSyncMessage to its ipldbind.GraphSyncMessage equivalent
108-
func (mh *MessageHandler) ToIPLD(gsm GraphSyncMessage) (*ipldbind.GraphSyncMessage, error) {
111+
func (mh *MessageHandler) toIPLD(gsm GraphSyncMessage) (*ipldbind.GraphSyncMessage, error) {
109112
ibm := new(ipldbind.GraphSyncMessage)
110113
ibm.Requests = make([]ipldbind.GraphSyncRequest, 0, len(gsm.requests))
111114
for _, request := range gsm.requests {
115+
sel := &request.selector
116+
if request.selector == nil {
117+
sel = nil
118+
}
119+
root := &request.root
120+
if request.root == cid.Undef {
121+
root = nil
122+
}
112123
ibm.Requests = append(ibm.Requests, ipldbind.GraphSyncRequest{
113124
Id: request.id.Bytes(),
114-
Root: request.root,
115-
Selector: &request.selector,
125+
Root: root,
126+
Selector: sel,
116127
Priority: request.priority,
117128
Cancel: request.isCancel,
118129
Update: request.isUpdate,
@@ -242,14 +253,14 @@ func (mh *MessageHandler) ToProtoV1(p peer.ID, gsm GraphSyncMessage) (*pb.Messag
242253
// prefixed with a length uvar
243254
func (mh *MessageHandler) ToNet(gsm GraphSyncMessage, w io.Writer) error {
244255
fmt.Printf("gsm: %v\n", gsm.String())
245-
msg, err := mh.ToIPLD(gsm)
256+
msg, err := mh.toIPLD(gsm)
246257
if err != nil {
247258
return err
248259
}
249260

250261
fmt.Printf("ipldgsm: %v\n", msg)
251262

252-
lbuf := make([]byte, binary.MaxVarintLen32)
263+
lbuf := make([]byte, binary.MaxVarintLen64)
253264
buf := new(bytes.Buffer)
254265
buf.Write(lbuf)
255266

@@ -258,12 +269,16 @@ func (mh *MessageHandler) ToNet(gsm GraphSyncMessage, w io.Writer) error {
258269
if err != nil {
259270
return err
260271
}
272+
//_, err = buf.WriteTo(w)
261273

262-
lbuflen := binary.PutUvarint(lbuf, uint64(buf.Len()-binary.MaxVarintLen32))
274+
lbuflen := binary.PutUvarint(lbuf, uint64(buf.Len()-binary.MaxVarintLen64))
263275
out := buf.Bytes()
264-
copy(lbuf[:lbuflen], out[lbuflen:])
276+
// fmt.Printf("%v = %v - %v\n", uint64(buf.Len()-binary.MaxVarintLen64), hex.EncodeToString(lbuf), lbuf[:lbuflen])
277+
copy(out[binary.MaxVarintLen64-lbuflen:], lbuf[:lbuflen])
278+
279+
fmt.Println(hex.EncodeToString(out))
280+
_, err = w.Write(out[binary.MaxVarintLen64-lbuflen:])
265281

266-
_, err = w.Write(out[lbuflen:])
267282
return err
268283
}
269284

@@ -338,15 +353,15 @@ func intIdToRequestId(p peer.ID, fromV1Map map[v1RequestKey]graphsync.RequestID,
338353
}
339354

340355
// Mapping from a ipldbind.GraphSyncMessage object to a GraphSyncMessage object
341-
func (mh *MessageHandler) messageFromIPLD(ibm *ipldbind.GraphSyncMessage) (GraphSyncMessage, error) {
356+
func (mh *MessageHandler) fromIPLD(ibm *ipldbind.GraphSyncMessage) (GraphSyncMessage, error) {
342357
requests := make(map[graphsync.RequestID]GraphSyncRequest, len(ibm.Requests))
343358
for _, req := range ibm.Requests {
344359
// exts := req.Extensions
345360
id, err := graphsync.ParseRequestID(req.Id)
346361
if err != nil {
347362
return GraphSyncMessage{}, err
348363
}
349-
requests[id] = newRequest(id, req.Root, *req.Selector, graphsync.Priority(req.Priority), req.Cancel, req.Update, nil)
364+
requests[id] = newRequest(id, *req.Root, *req.Selector, graphsync.Priority(req.Priority), req.Cancel, req.Update, nil)
350365
}
351366

352367
responses := make(map[graphsync.RequestID]GraphSyncResponse, len(ibm.Responses))

0 commit comments

Comments
 (0)