Add blacklist to cache

This commit is contained in:
Asim 2016-05-06 23:15:40 +01:00
parent 77e4d4d9c4
commit 8353b7b865

View File

@ -7,6 +7,7 @@ import (
"github.com/micro/go-micro/registry" "github.com/micro/go-micro/registry"
"github.com/micro/go-micro/selector" "github.com/micro/go-micro/selector"
"github.com/micro/go-micro/selector/internal/blacklist"
) )
/* /*
@ -26,6 +27,9 @@ type cacheSelector struct {
// used to close or reload watcher // used to close or reload watcher
reload chan bool reload chan bool
exit chan bool exit chan bool
// blacklist
bl *blacklist.BlackList
} }
var ( var (
@ -345,6 +349,11 @@ func (c *cacheSelector) Select(service string, opts ...selector.SelectOption) (s
services = filter(services) services = filter(services)
} }
services, err = c.bl.Filter(services)
if err != nil {
return nil, err
}
// if there's nothing left, return // if there's nothing left, return
if len(services) == 0 { if len(services) == 0 {
return nil, selector.ErrNotFound return nil, selector.ErrNotFound
@ -354,13 +363,14 @@ func (c *cacheSelector) Select(service string, opts ...selector.SelectOption) (s
} }
func (c *cacheSelector) Mark(service string, node *registry.Node, err error) { func (c *cacheSelector) Mark(service string, node *registry.Node, err error) {
return c.bl.Mark(service, node, err)
} }
func (c *cacheSelector) Reset(service string) { func (c *cacheSelector) Reset(service string) {
c.Lock() c.Lock()
c.del(service) c.del(service)
c.Unlock() c.Unlock()
c.bl.Reset(service)
} }
// Close stops the watcher and destroys the cache // Close stops the watcher and destroys the cache
@ -374,6 +384,7 @@ func (c *cacheSelector) Close() error {
return nil return nil
default: default:
close(c.exit) close(c.exit)
c.bl.Close()
} }
return nil return nil
} }
@ -410,6 +421,7 @@ func NewSelector(opts ...selector.Option) selector.Selector {
ttls: make(map[string]time.Time), ttls: make(map[string]time.Time),
reload: make(chan bool, 1), reload: make(chan bool, 1),
exit: make(chan bool), exit: make(chan bool),
bl: blacklist.New(),
} }
go c.run() go c.run()