Skip to content

Commit

Permalink
Merge pull request #258 from aarshkshah1992/feat/blacklist-timecache
Browse files Browse the repository at this point in the history
Replace LRU cache blacklist implementation with a time cache
  • Loading branch information
vyzo authored Feb 5, 2020
2 parents 25c434f + 6eeed58 commit 40e1c94
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 19 deletions.
37 changes: 21 additions & 16 deletions blacklist.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package pubsub

import (
lru "github.com/hashicorp/golang-lru"
"sync"
"time"

"github.com/libp2p/go-libp2p-core/peer"
"github.com/whyrusleeping/timecache"
)

// Blacklist is an interface for peer blacklisting.
Expand All @@ -28,26 +31,28 @@ func (b MapBlacklist) Contains(p peer.ID) bool {
return ok
}

// LRUBlacklist is a blacklist implementation using an LRU cache
type LRUBlacklist struct {
lru *lru.Cache
// TimeCachedBlacklist is a blacklist implementation using a time cache
type TimeCachedBlacklist struct {
sync.RWMutex
tc *timecache.TimeCache
}

// 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}
// NewTimeCachedBlacklist creates a new TimeCachedBlacklist with the given expiry duration
func NewTimeCachedBlacklist(expiry time.Duration) (Blacklist, error) {
b := &TimeCachedBlacklist{tc: timecache.NewTimeCache(expiry)}
return b, nil
}

func (b LRUBlacklist) Add(p peer.ID) {
b.lru.Add(p, nil)
func (b *TimeCachedBlacklist) Add(p peer.ID) {
b.Lock()
defer b.Unlock()

b.tc.Add(p.String())
}

func (b LRUBlacklist) Contains(p peer.ID) bool {
return b.lru.Contains(p)
func (b *TimeCachedBlacklist) Contains(p peer.ID) bool {
b.RLock()
defer b.RUnlock()

return b.tc.Has(p.String())
}
5 changes: 2 additions & 3 deletions blacklist_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ func TestMapBlacklist(t *testing.T) {

}

func TestLRUBlacklist(t *testing.T) {
b, err := NewLRUBlacklist(10)
func TestTimeCachedBlacklist(t *testing.T) {
b, err := NewTimeCachedBlacklist(10 * time.Minute)
if err != nil {
t.Fatal(err)
}
Expand All @@ -32,7 +32,6 @@ func TestLRUBlacklist(t *testing.T) {
if !b.Contains(p) {
t.Fatal("peer not in the blacklist")
}

}

func TestBlacklist(t *testing.T) {
Expand Down

0 comments on commit 40e1c94

Please sign in to comment.