diff --git a/2q.go b/2q.go index e474cd0..44169f4 100644 --- a/2q.go +++ b/2q.go @@ -70,7 +70,9 @@ func New2QParams(size int, recentRatio float64, ghostRatio float64) (*TwoQueueCa } recentEvict, err := simplelru.NewLRU(evictSize, nil) if err != nil { - return nil, err + if _, ok := err.(*simplelru.InvalidSize); ok { + return nil, fmt.Errorf("Failed to create Evict cache, please choose a higher 'ghostRatio' or increase cache 'size'") + } } // Initialize the cache diff --git a/simplelru/lru.go b/simplelru/lru.go index a86c853..7a99080 100644 --- a/simplelru/lru.go +++ b/simplelru/lru.go @@ -2,9 +2,18 @@ package simplelru import ( "container/list" - "errors" ) +// InvalidSize error is returned when a size <= 0 is given while creating simplelru +type InvalidSize struct { + errMsg string +} + +// Error implements the error interface for type InvalidSize +func (e *InvalidSize) Error() string { + return "Must provide a positive size" +} + // EvictCallback is used to get a callback when a cache entry is evicted type EvictCallback func(key interface{}, value interface{}) @@ -25,7 +34,7 @@ type entry struct { // NewLRU constructs an LRU of the given size func NewLRU(size int, onEvict EvictCallback) (*LRU, error) { if size <= 0 { - return nil, errors.New("Must provide a positive size") + return nil, &InvalidSize{} } c := &LRU{ size: size,