Skip to content

Commit ef06b3d

Browse files
authored
feat(requestmanager): run response hooks on completed requests (#77)
We should run response hooks even on requests that are alerady completed
1 parent fb8f4bb commit ef06b3d

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

requestmanager/requestmanager.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,8 @@ func (crm *cancelRequestMessage) handle(rm *RequestManager) {
382382
}
383383

384384
func (prm *processResponseMessage) handle(rm *RequestManager) {
385-
filteredResponses := rm.filterResponsesForPeer(prm.responses, prm.p)
386-
filteredResponses = rm.processExtensions(filteredResponses, prm.p)
385+
filteredResponses := rm.processExtensions(prm.responses, prm.p)
386+
filteredResponses = rm.filterResponsesForPeer(filteredResponses, prm.p)
387387
rm.updateLastResponses(filteredResponses)
388388
responseMetadata := metadataForResponses(filteredResponses)
389389
rm.asyncLoader.ProcessResponse(responseMetadata, prm.blks)
@@ -426,7 +426,10 @@ func (rm *RequestManager) processExtensionsForResponse(p peer.ID, response gsmsg
426426
rm.peerHandler.SendRequest(p, updateRequest)
427427
}
428428
if result.Err != nil {
429-
requestStatus := rm.inProgressRequestStatuses[response.RequestID()]
429+
requestStatus, ok := rm.inProgressRequestStatuses[response.RequestID()]
430+
if !ok {
431+
return false
432+
}
430433
responseError := rm.generateResponseErrorFromStatus(graphsync.RequestFailedUnknown)
431434
select {
432435
case requestStatus.networkError <- responseError:

requestmanager/requestmanager_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,10 @@ func TestLocallyFulfilledFirstRequestSucceedsLater(t *testing.T) {
293293
defer cancel()
294294
peers := testutil.GeneratePeers(1)
295295

296+
called := make(chan struct{})
297+
td.responseHooks.Register(func(p peer.ID, response graphsync.ResponseData, hookActions graphsync.IncomingResponseHookActions) {
298+
close(called)
299+
})
296300
returnedResponseChan, returnedErrorChan := td.requestManager.SendRequest(requestCtx, peers[0], td.blockChain.TipLink, td.blockChain.Selector())
297301

298302
rr := readNNetworkRequests(requestCtx, t, td.requestRecordChan, 1)[0]
@@ -310,6 +314,7 @@ func TestLocallyFulfilledFirstRequestSucceedsLater(t *testing.T) {
310314

311315
td.fal.VerifyNoRemainingData(t, rr.gsr.ID())
312316
testutil.VerifyEmptyErrors(ctx, t, returnedErrorChan)
317+
testutil.AssertDoesReceive(requestCtx, t, called, "response hooks called for response")
313318
}
314319

315320
func TestRequestReturnsMissingBlocks(t *testing.T) {

0 commit comments

Comments
 (0)