@@ -109,12 +109,17 @@ func (rm *RequestManager) requestTask(requestID graphsync.RequestID) executor.Re
109
109
LinkBudget : int64 (rm .maxLinksPerRequest ),
110
110
}
111
111
}
112
+ // the traverser has its own context because we want to fail on block boundaries, in the executor,
113
+ // and make sure all blocks included up to the termination message
114
+ // are processed and passed in the response channel
115
+ ctx , cancel := context .WithCancel (rm .ctx )
116
+ ipr .traverserCancel = cancel
112
117
ipr .traverser = ipldutil.TraversalBuilder {
113
118
Root : cidlink.Link {Cid : ipr .request .Root ()},
114
119
Selector : ipr .request .Selector (),
115
120
Visitor : func (tp traversal.Progress , node ipld.Node , tr traversal.VisitReason ) error {
116
121
select {
117
- case <- ipr . ctx .Done ():
122
+ case <- ctx .Done ():
118
123
case ipr .inProgressChan <- graphsync.ResponseProgress {
119
124
Node : node ,
120
125
Path : tp .Path ,
@@ -126,7 +131,7 @@ func (rm *RequestManager) requestTask(requestID graphsync.RequestID) executor.Re
126
131
Chooser : ipr .nodeStyleChooser ,
127
132
LinkSystem : rm .linkSystem ,
128
133
Budget : budget ,
129
- }.Start (ipr . ctx )
134
+ }.Start (ctx )
130
135
}
131
136
132
137
ipr .state = running
@@ -165,6 +170,7 @@ func (rm *RequestManager) terminateRequest(requestID graphsync.RequestID, ipr *i
165
170
ipr .cancelFn ()
166
171
rm .asyncLoader .CleanupRequest (requestID )
167
172
if ipr .traverser != nil {
173
+ ipr .traverserCancel ()
168
174
ipr .traverser .Shutdown (rm .ctx )
169
175
}
170
176
// make sure context is not closed before closing channels (could cause send
@@ -236,6 +242,10 @@ func (rm *RequestManager) processResponseMessage(p peer.ID, responses []gsmsg.Gr
236
242
filteredResponses = rm .filterResponsesForPeer (filteredResponses , p )
237
243
rm .updateLastResponses (filteredResponses )
238
244
responseMetadata := metadataForResponses (filteredResponses )
245
+ fmt .Println (responseMetadata )
246
+ if len (filteredResponses ) > 0 {
247
+ fmt .Println (filteredResponses [0 ].Status ())
248
+ }
239
249
rm .asyncLoader .ProcessResponse (responseMetadata , blks )
240
250
rm .processTerminations (filteredResponses )
241
251
log .Debugf ("end processing message for peer %s" , p )
0 commit comments