Codebase list golang-github-go-kit-kit / bb87de2 loadbalancer / endpoint_cache.go
bb87de2

Tree @bb87de2 (Download .tar.gz)

endpoint_cache.go @bb87de2raw · history · blame

package loadbalancer

import "github.com/go-kit/kit/endpoint"

type endpointCache struct {
	requests chan []endpoint.Endpoint
	quit     chan struct{}
}

func newEndpointCache(p Publisher) *endpointCache {
	c := &endpointCache{
		requests: make(chan []endpoint.Endpoint),
		quit:     make(chan struct{}),
	}
	go c.loop(p)
	return c
}

func (c *endpointCache) loop(p Publisher) {
	updates := make(chan []endpoint.Endpoint, 1)
	p.Subscribe(updates)
	defer p.Unsubscribe(updates)
	endpoints := <-updates

	for {
		select {
		case endpoints = <-updates:
		case c.requests <- endpoints:
		case <-c.quit:
			return
		}
	}
}

func (c *endpointCache) get() []endpoint.Endpoint {
	return <-c.requests
}

func (c *endpointCache) stop() {
	close(c.quit)
}