Documentation ¶
Overview ¶
Copyright 2017 The margin Authors. All rights reserved. Use of this source code is governed by a MIT-style license that can be found in the LICENSE file. Read more about consistent hashing on wikipedia: http://en.wikipedia.org/wiki/Consistent_hashing Modified from https://github.com/stathat/consistent
Package proxy provides an tcp proxy applied with consistent routers to backends
Index ¶
- Constants
- Variables
- func UnderlyingConn(c net.Conn) net.Conn
- type Conn
- type Consistent
- func (c *Consistent) Add(elt string, t Target)
- func (c *Consistent) Get(name string) (string, error)
- func (c *Consistent) GetN(name string, n int) ([]string, error)
- func (c *Consistent) GetTarget(name string) (Target, error)
- func (c *Consistent) GetTwo(name string) (string, string, error)
- func (c *Consistent) Members() []string
- func (c *Consistent) Remove(elt string)
- func (c *Consistent) Set(elts []string)
- type DialProxy
- type Matcher
- type Proxy
- type Target
Constants ¶
const (
MonitorInterval = 1e9
)
Variables ¶
var ErrEmptyCircle = errors.New("empty circle")
ErrEmptyCircle is the error returned when trying to get an element when nothing has been added to hash.
Functions ¶
Types ¶
type Conn ¶
type Consistent ¶
type Consistent struct { NumberOfReplicas int sync.RWMutex // contains filtered or unexported fields }
Consistent holds the information about the members of the consistent hash circle.
func New ¶
func New() *Consistent
New creates a new Consistent object with a default setting of 20 replicas for each entry.
To change the number of replicas, set NumberOfReplicas before adding entries.
func (*Consistent) Add ¶
func (c *Consistent) Add(elt string, t Target)
Add inserts a string element in the consistent hash.
func (*Consistent) Get ¶
func (c *Consistent) Get(name string) (string, error)
Get returns an element close to where name hashes to in the circle.
func (*Consistent) GetN ¶
func (c *Consistent) GetN(name string, n int) ([]string, error)
GetN returns the N closest distinct elements to the name input in the circle.
func (*Consistent) GetTwo ¶
func (c *Consistent) GetTwo(name string) (string, string, error)
GetTwo returns the two closest distinct elements to the name input in the circle.
func (*Consistent) Members ¶
func (c *Consistent) Members() []string
func (*Consistent) Remove ¶
func (c *Consistent) Remove(elt string)
Remove removes an element from the hash.
func (*Consistent) Set ¶
func (c *Consistent) Set(elts []string)
Set sets all the elements in the hash. If there are existing elements not present in elts, they will be removed.
type DialProxy ¶
type DialProxy struct { // Addr is the TCP address to proxy to. Addr string KeepAlivePeriod time.Duration // If zero, a default is used. // If negative, the timeout is disabled. DialTimeout time.Duration // DialContext optionally specifies an alternate dial function // for TCP targets. If nil, the standard // net.Dialer.DialContext method is used. DialContext func(ctx context.Context, network, address string) (net.Conn, error) // OnDialError optionally specifies an alternate way to handle errors dialing Addr. OnDialError func(src net.Conn, dstDialErr error) ProxyProtocolVersion int }
DialProxy implements Target by dialing a new connection to Addr and then proxying data back and forth.
func (*DialProxy) HandleConn ¶
HandleConn implements the Target interface.
type Proxy ¶
type Proxy struct { LocalHost string // ListenFunc optionally specifies an alternate listen function. ListenFunc func(net, laddr string) (net.Listener, error) // contains filtered or unexported fields }
Proxy is a proxy.
func (*Proxy) AddHTTPHostMatchRoute ¶
func (*Proxy) AddHTTPHostRoute ¶
func (*Proxy) AddRoute ¶
AddRoute is generally used as either the only rule (for simple TCP proxies based on consistent hash)