From f6ac3aab4faeaec37731c88b7520a9de15c8af20 Mon Sep 17 00:00:00 2001 From: vyzo Date: Thu, 17 Jan 2019 14:20:34 +0200 Subject: [PATCH] lru blackclist --- blacklist.go | 25 +++++++++++++++++++++++++ package.json | 7 +++++++ 2 files changed, 32 insertions(+) diff --git a/blacklist.go b/blacklist.go index 17bb241..84f2efb 100644 --- a/blacklist.go +++ b/blacklist.go @@ -1,6 +1,7 @@ package pubsub import ( + lru "github.com/hashicorp/golang-lru" peer "github.com/libp2p/go-libp2p-peer" ) @@ -26,3 +27,27 @@ func (b MapBlacklist) Contains(p peer.ID) bool { _, ok := b[p] return ok } + +// LRUBlacklist is a blacklist implementation using an LRU cache +type LRUBlacklist struct { + lru *lru.Cache +} + +// NewLRUBlacklist creates a new LRUBlacklist with capacity cap +func NewLRUBlacklist(cap int) (Blacklist, error) { + c, err := lru.New(cap) + if err != nil { + return nil, err + } + + b := &LRUBlacklist{lru: c} + return b, nil +} + +func (b LRUBlacklist) Add(p peer.ID) { + b.lru.Add(p, nil) +} + +func (b LRUBlacklist) Contains(p peer.ID) bool { + return b.lru.Contains(p) +} diff --git a/package.json b/package.json index dcd396c..92678ea 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,12 @@ "hash": "QmabLh8TrJ3emfAoQk5AbqbLTbMyj7XqumMFmAFxa9epo8", "name": "go-multistream", "version": "0.3.9" + }, + { + "author": "hashicorp", + "hash": "QmQjMHF8ptRgx4E57UFMiT4YM6kqaJeYxZ1MCDX23aw4rK", + "name": "golang-lru", + "version": "2017.10.18" } ], "gxVersion": "0.9.0", @@ -86,3 +92,4 @@ "releaseCmd": "git commit -a -m \"gx publish $VERSION\"", "version": "0.11.10" } +