-
Notifications
You must be signed in to change notification settings - Fork 74
Add block filter via BadBits #825
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
Conversation
Bitswap has a built-in mechanism for deny-lists that we could use.
I think that's a good idea - we expect the size of the list to grow in future so it would be good to avoid unnecessary downloads
I'd suggest we do use an on-disk cache. The size of the list is likely to increase in future. I'd suggest that on startup
That sounds right to me - I think it makes sense for the denylist to be best-effort
Merged ✅ |
3d438d7
to
2431c85
Compare
2431c85
to
b769069
Compare
PR updated:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've approved this PR, with a few suggestions for minor improvements. Nice work! 🙌
My one concern here is what happens as the badbits list grows large. Is there a way we can put a reasonable bound on the amount of memory reserved for the badbits filter? Would it make sense to use something like leveldb to keep it on disk instead? |
@dirkmc yes, we can definitely do follow up experiments if the list grows large. One interesting thing to note: currently, the list is only about 1MB large, way smaller than I would have guessed given how long it's been in operation. |
* booster bitswap MVP executable (#707) * feat(booster-bitswap): booster bitswap MVP untested * refactor(booster-bitswap): use API for fetching blocks * fix(deps): update deps to compile * feat(booster-bitswap): makefile & fixes add commands to build booster-bitswap, and very a round tripped successful fetch from booster-bitswap * refactor: clean up unused vars etc * fix: booster-bitsawp - check error when creating libp2p key * refactor(node): avoid FreeAndUnsealed method Co-authored-by: Dirk McCormick <[email protected]> Co-authored-by: Anton Evangelatov <[email protected]> * booster-bitswap devnet and tracing (#796) * return ipld ErrNotFound from remote blockstore interface (#798) * fix: return ipld ErrNotFound from remote blockstore interface * test: add more tests for ipld ErrNotFound * test: comment out part of TestDummydealOnline that is flaky due to a bug in latest lotus (#802) * fix normaliseError nil ptr dereference (#803) * feat: shard selector (#807) * LoadBalancer for bitswap (and later, more of libp2p) (#786) * feat(loadbalancer): add message types * feat(messages): add utility functions * feat(loadbalancer): initial load balancer impl implementation of the load balancer node itself * feat(loadbalancer): add service node implements code for running a service node * feat(loadbalancer): integrate into boost and booster-bitswap * Update loadbalancer/loadbalancer.go Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/servicenode.go Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/servicenode.go Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/messages/messages.ipldsch Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/messages/messages.ipldsch Co-authored-by: Rod Vagg <[email protected]> * refactor(loadbalancer): remove routing protocol remove the routing protocol, instead relying on a set config. also remove forwarding response for inbound requests * fix(loadbalancer): update tests * refactor(loadbalancer): integrate simplified load balancer removed pub keys to minimize network traffic, added api's to configure and update bitswap peer id, added auto config of bitswap peer id in booster-bitswap * docs(gen): regenerate api docs * chore(lint): fix lint errors * fix(loadbalancer): minor bridgestream fix * Update loadbalancer/servicenode.go Co-authored-by: dirkmc <[email protected]> * refactor(protocolproxy): address PR comments renames, reconfigured architecture, etc * refactor(make init print out peer id): remove apis and transparent peer id setting. have init print Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: dirkmc <[email protected]> * Add block filter via BadBits (#825) * feat(booster-bitswap): add block filter via BadBits * refactor(booster-bitswap): use bitswap blockfilter for filtering * feat(blockfilter): only update when list is modified * feat(blockFilter): add on disk caching * Update cmd/booster-bitswap/blockfilter/blockfilter.go Co-authored-by: dirkmc <[email protected]> * fix(blockfilter): minor PR fixups Co-authored-by: dirkmc <[email protected]> * Libp2p 0.22 upgrade (#837) * chore(deps): upgrade to Lotus RC & libp2p v0.22 * chore(deps): update go to 1.18 * ci(circle): update circle to go 1.18 * style(imports): fix imports * fix(build): update ffi * fix(lint): fix deprecated strings.Title method * fix(mod): mod tidy * Protocol Proxy cleanup (#836) * refactor(booster-bitswap): minor UI fixes for booster-bitswap UI * Update cmd/booster-bitswap/init.go Co-authored-by: dirkmc <[email protected]> Co-authored-by: dirkmc <[email protected]> * feat: update to dagstore v0.5.5 (#849) * add booster-bitswap to devnet (#866) * bump lotus-test version * add docker/booster-bitswap target in Makefile Co-authored-by: Hannah Howard <[email protected]> Co-authored-by: Dirk McCormick <[email protected]> Co-authored-by: Rod Vagg <[email protected]>
* booster bitswap MVP executable (#707) * feat(booster-bitswap): booster bitswap MVP untested * refactor(booster-bitswap): use API for fetching blocks * fix(deps): update deps to compile * feat(booster-bitswap): makefile & fixes add commands to build booster-bitswap, and very a round tripped successful fetch from booster-bitswap * refactor: clean up unused vars etc * fix: booster-bitsawp - check error when creating libp2p key * refactor(node): avoid FreeAndUnsealed method Co-authored-by: Dirk McCormick <[email protected]> Co-authored-by: Anton Evangelatov <[email protected]> * booster-bitswap devnet and tracing (#796) * return ipld ErrNotFound from remote blockstore interface (#798) * fix: return ipld ErrNotFound from remote blockstore interface * test: add more tests for ipld ErrNotFound * test: comment out part of TestDummydealOnline that is flaky due to a bug in latest lotus (#802) * fix normaliseError nil ptr dereference (#803) * feat: shard selector (#807) * LoadBalancer for bitswap (and later, more of libp2p) (#786) * feat(loadbalancer): add message types * feat(messages): add utility functions * feat(loadbalancer): initial load balancer impl implementation of the load balancer node itself * feat(loadbalancer): add service node implements code for running a service node * feat(loadbalancer): integrate into boost and booster-bitswap * Update loadbalancer/loadbalancer.go Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/servicenode.go Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/servicenode.go Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/messages/messages.ipldsch Co-authored-by: Rod Vagg <[email protected]> * Update loadbalancer/messages/messages.ipldsch Co-authored-by: Rod Vagg <[email protected]> * refactor(loadbalancer): remove routing protocol remove the routing protocol, instead relying on a set config. also remove forwarding response for inbound requests * fix(loadbalancer): update tests * refactor(loadbalancer): integrate simplified load balancer removed pub keys to minimize network traffic, added api's to configure and update bitswap peer id, added auto config of bitswap peer id in booster-bitswap * docs(gen): regenerate api docs * chore(lint): fix lint errors * fix(loadbalancer): minor bridgestream fix * Update loadbalancer/servicenode.go Co-authored-by: dirkmc <[email protected]> * refactor(protocolproxy): address PR comments renames, reconfigured architecture, etc * refactor(make init print out peer id): remove apis and transparent peer id setting. have init print Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: dirkmc <[email protected]> * Add block filter via BadBits (#825) * feat(booster-bitswap): add block filter via BadBits * refactor(booster-bitswap): use bitswap blockfilter for filtering * feat(blockfilter): only update when list is modified * feat(blockFilter): add on disk caching * Update cmd/booster-bitswap/blockfilter/blockfilter.go Co-authored-by: dirkmc <[email protected]> * fix(blockfilter): minor PR fixups Co-authored-by: dirkmc <[email protected]> * Libp2p 0.22 upgrade (#837) * chore(deps): upgrade to Lotus RC & libp2p v0.22 * chore(deps): update go to 1.18 * ci(circle): update circle to go 1.18 * style(imports): fix imports * fix(build): update ffi * fix(lint): fix deprecated strings.Title method * fix(mod): mod tidy * Protocol Proxy cleanup (#836) * refactor(booster-bitswap): minor UI fixes for booster-bitswap UI * Update cmd/booster-bitswap/init.go Co-authored-by: dirkmc <[email protected]> Co-authored-by: dirkmc <[email protected]> * feat: update to dagstore v0.5.5 (#849) * feat: bitswap client * feat: bitswap client - output car file * refactor: bitswap client - remove tracing * feat: debug logs * fix: write blocks to blockstore * fix: duration output * fix: duration output for block received * feat: add pprof to bitswap client * feat: protocol proxy logging * feat: bitswap client - check host supports bitswap protocol * feat: listen for bitswap requests locally as well as through forwarding protocol Co-authored-by: Hannah Howard <[email protected]> Co-authored-by: Anton Evangelatov <[email protected]> Co-authored-by: Rod Vagg <[email protected]>
Goals
Provide a mechanism for filtering out illegal CID requests in bitswap.
Implementation
For discusion (that's why it's a draft)
Currently, this lives inside of booster bitswap -- should it instead live inside of boost and possibly the block API calls?
I didn't put optimization around passing If-Not-Modified as request header and checking for a 304 Not Modified response -- this may be prudent as the list updates a lot but not every five minutes
There's no on disk cache -- this was done for simplicity but does mean you need to fetch at startup. Also, this is a blocking call currently -- maybe that's not ideal?
What is the right way to handle fetching/parsing errors? Right now it's just log.Errorf
blocked on LoadBalancer for bitswap (and later, more of libp2p) #786 (currently that branch is the base for this one)