Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add cancel request and wait function #185

Merged
merged 8 commits into from Aug 4, 2021

Conversation

hannahhoward
Copy link
Collaborator

@hannahhoward hannahhoward commented Aug 3, 2021

Goals

Add an imperative method that cancels a graphsync request and does not return until no further blocks can load and the request is completely cleaned up

Implementation

  • Add top level CancelRequest method
  • Add requestmanager CancelRequest method
  • CancelRequest
    • cancels the internal request context (this will trigger running request routines to terminate)
    • sends a cancellation to the other peer
    • waits for any processing to complete by adding a notfication channel that gets written only when all processing is complete for the request
    • sending RequestClientCancelledErr (formerly RequestContextCancelledErr)
  • rename poorly named private var "network error" to "terminal error"
  • protect against multiple terminal errors by only writing once
  • Fix race in IPLD util traversal
  • Rename RequestContextCancelledErr

For Discussion

Would it make sense to have CancelRequest take a context, where if that context expired the routine would return even if the request had not signaled it was done (just in case?)

Fixes #184

fix hang in code due to potential race, mark this code in need of replacement
add a cancel request that waits for the request to fully complete. add test that verifies no race.
rename RequestContextCancelledErr to reflect reason for err
@dirkmc
Copy link
Collaborator

dirkmc commented Aug 3, 2021

Would it make sense to have CancelRequest take a context, where if that context expired the routine would return even if the request had not signaled it was done (just in case?)

Yes I think that's a good idea 👍

add a context that can timeout a cancel request if it doesn't finish in a set time
@hannahhoward hannahhoward changed the title Add cancel request and wait and wait function Add cancel request and wait function Aug 3, 2021
@hannahhoward
Copy link
Collaborator Author

@dirkmc added :)

@dirkmc
Copy link
Collaborator

dirkmc commented Aug 3, 2021

Great, thanks 👍

Looks like there are still a couple of fmt.Println in the tests

@raulk raulk requested a review from dirkmc August 3, 2021 14:15
requestmanager/requestmanager.go Show resolved Hide resolved
requestmanager/requestmanager_test.go Outdated Show resolved Hide resolved
requestmanager/requestmanager_test.go Outdated Show resolved Hide resolved
graphsync.go Show resolved Hide resolved
graphsync.go Outdated Show resolved Hide resolved
requestmanager/requestmanager_test.go Show resolved Hide resolved
requestmanager/requestmanager_test.go Outdated Show resolved Hide resolved
requestmanager/requestmanager_test.go Show resolved Hide resolved
@raulk raulk merged commit a81371b into release/0.6.x Aug 4, 2021
@raulk raulk deleted the feat/cancel-request-and-wait branch August 4, 2021 17:12
hannahhoward added a commit that referenced this pull request Aug 5, 2021
* feat: fire network error when network disconnects during request (#164)

* release: 0.6.1

* Better logging for Graphsync traversal (#167)

* log gs traversal

* Apply suggestions from code review

Co-authored-by: dirkmc <dirkmdev@gmail.com>

* add debug logs

* add debug logs

Co-authored-by: dirkmc <dirkmdev@gmail.com>

* release: v0.6.2 (#168)

* Fix/log blockstore reads (#169)

* log gs traversal

* Apply suggestions from code review

Co-authored-by: dirkmc <dirkmdev@gmail.com>

* add debug logs

* fixed logging

* Apply suggestions from code review

Co-authored-by: dirkmc <dirkmdev@gmail.com>

* fixed error

Co-authored-by: dirkmc <dirkmdev@gmail.com>

* release: v0.6.3 (#170)

* request queued hook

* test request queued hook

* release: v0.6.4

* Resolve 175 race condition, no change to hook timing (#178)

* feat(requestmanager): add request timing (#181)

* Add cancel request and wait function (#185)

* fix(responsemanager): fix error codes (#182)

enforce much tighter consistency with graphsync spec in usage of error codes

* refactor: replace particular request not found errors with public error (#188)

* release: 0.6.8

Co-authored-by: dirkmc <dirkmdev@gmail.com>
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
marten-seemann pushed a commit that referenced this pull request Mar 2, 2023
* fix: dont double count data sent

* fix: stricter asserts in channels tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants