recon

package
v2.0.0-...-383cd4d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 24, 2019 License: GPL-3.0, AGPL-3.0 Imports: 16 Imported by: 18

Documentation

Overview

Package recon provides the SKS reconciliation protocol, prefix tree interface and an in-memory prefix-tree implementation.

The Conflux recon API is versioned with gopkg. Use in your projects with:

import "gopkg.in/hockeypuck/conflux.v2/recon"

Index

Constants

View Source
const (
	MsgTypeReconRqstPoly = MsgType(0)
	MsgTypeReconRqstFull = MsgType(1)
	MsgTypeElements      = MsgType(2)
	MsgTypeFullElements  = MsgType(3)
	MsgTypeSyncFail      = MsgType(4)
	MsgTypeDone          = MsgType(5)
	MsgTypeFlush         = MsgType(6)
	MsgTypeError         = MsgType(7)
	MsgTypeDbRqst        = MsgType(8)
	MsgTypeDbRepl        = MsgType(9)
	MsgTypeConfig        = MsgType(10)
)
View Source
const (
	NetworkDefault = netType("")
	NetworkTCP     = netType("tcp")
	NetworkUnix    = netType("unix")
)
View Source
const (
	DefaultVersion                     = "1.1.3"
	DefaultLogName                     = "conflux.recon"
	DefaultHTTPAddr                    = ":11371"
	DefaultReconAddr                   = ":11370"
	DefaultGossipIntervalSecs          = 60
	DefaultMaxOutstandingReconRequests = 100

	DefaultThreshMult = 10
	DefaultBitQuantum = 2
	DefaultMBar       = 5
)
View Source
const GOSSIP = "gossip"
View Source
const SERVE = "serve"

Variables

View Source
var (
	PeerModeDefault    = PeerMode("")
	PeerModeGossipOnly = PeerMode("gossip only")
	PeerModeServeOnly  = PeerMode("serve only")
)
View Source
var ErrIncompatiblePeer error = errors.New("remote peer configuration is not compatible")
View Source
var ErrNoPartners error = errors.New("no recon partners configured")
View Source
var ErrNodeNotFound error = errors.New("prefix-tree node not found")
View Source
var ErrPeerBusy error = errors.New("peer is busy handling another request")
View Source
var ErrReconDone = errors.New("reconciliation done")
View Source
var ErrReconRqstPolyNotFound = errors.New(
	"peer should not receive a request for a non-existant node in ReconRqstPoly")
View Source
var ErrRemoteRejectedConfig error = errors.New("remote rejected configuration")
View Source
var ErrSamplePointElement = errors.New("sample point added to elements")
View Source
var ErrUnexpectedLeafNode = errors.New("unexpected leaf node")
View Source
var RemoteConfigFailed string = "failed"
View Source
var RemoteConfigPassed string = "passed"
View Source
var (
	SksZpNbytes int
)

Functions

func AddElementArray

func AddElementArray(t PrefixTree, z *cf.Zp) (marray []*cf.Zp, err error)

func DelElementArray

func DelElementArray(t PrefixTree, z *cf.Zp) (marray []*cf.Zp)

func IsGossipBlocked

func IsGossipBlocked(err error) bool

func MustElements

func MustElements(node PrefixNode) []*cf.Zp

func NextChild

func NextChild(n PrefixNode, bs *cf.Bitstring, depth int) int

func PadSksElement

func PadSksElement(zb []byte) []byte

func ReadBitstring

func ReadBitstring(r io.Reader) (*cf.Bitstring, error)

func ReadInt

func ReadInt(r io.Reader) (n int, err error)

func ReadLen

func ReadLen(r io.Reader) (int, error)

func ReadString

func ReadString(r io.Reader) (string, error)

func ReadZSet

func ReadZSet(r io.Reader) (*cf.ZSet, error)

func ReadZZarray

func ReadZZarray(r io.Reader) ([]*cf.Zp, error)

func ReadZp

func ReadZp(r io.Reader) (*cf.Zp, error)

func WriteBitstring

func WriteBitstring(w io.Writer, bs *cf.Bitstring) (err error)

func WriteInt

func WriteInt(w io.Writer, n int) (err error)

func WriteMsg

func WriteMsg(w io.Writer, msgs ...ReconMsg) (err error)

func WriteMsgDirect

func WriteMsgDirect(w io.Writer, msg ReconMsg) (err error)

func WriteString

func WriteString(w io.Writer, text string) (err error)

func WriteZSet

func WriteZSet(w io.Writer, zset *cf.ZSet) error

func WriteZZarray

func WriteZZarray(w io.Writer, arr []*cf.Zp) (err error)

func WriteZp

func WriteZp(w io.Writer, z *cf.Zp) (err error)

Types

type Config

type Config struct {
	Version    string
	HTTPPort   int
	BitQuantum int
	MBar       int
	Filters    string
	Custom     map[string]string
}

func (*Config) MsgType

func (msg *Config) MsgType() MsgType

func (*Config) String

func (msg *Config) String() string

type DbRepl

type DbRepl struct {
	// contains filtered or unexported fields
}

func (*DbRepl) MsgType

func (msg *DbRepl) MsgType() MsgType

func (*DbRepl) String

func (msg *DbRepl) String() string

type DbRqst

type DbRqst struct {
	// contains filtered or unexported fields
}

func (*DbRqst) MsgType

func (msg *DbRqst) MsgType() MsgType

func (*DbRqst) String

func (msg *DbRqst) String() string

type Done

type Done struct {
	// contains filtered or unexported fields
}

func (*Done) MsgType

func (msg *Done) MsgType() MsgType

func (*Done) String

func (msg *Done) String() string

type Elements

type Elements struct {
	*cf.ZSet
}

func (*Elements) MsgType

func (msg *Elements) MsgType() MsgType

func (*Elements) String

func (msg *Elements) String() string

type Error

type Error struct {
	// contains filtered or unexported fields
}

func (*Error) MsgType

func (msg *Error) MsgType() MsgType

func (*Error) String

func (msg *Error) String() string

type Flush

type Flush struct {
	// contains filtered or unexported fields
}

func (*Flush) MsgType

func (msg *Flush) MsgType() MsgType

func (*Flush) String

func (msg *Flush) String() string

type FullElements

type FullElements struct {
	*cf.ZSet
}

func (*FullElements) MsgType

func (msg *FullElements) MsgType() MsgType

func (*FullElements) String

func (msg *FullElements) String() string

type IPMatcher

type IPMatcher interface {
	Match(ip net.IP) bool
}

type MemPrefixNode

type MemPrefixNode struct {
	// All nodes share the tree definition as a common context
	*MemPrefixTree
	// contains filtered or unexported fields
}

func (*MemPrefixNode) Children

func (n *MemPrefixNode) Children() ([]PrefixNode, error)

func (*MemPrefixNode) Config

func (n *MemPrefixNode) Config() *PTreeConfig

func (*MemPrefixNode) Elements

func (n *MemPrefixNode) Elements() ([]*cf.Zp, error)

func (*MemPrefixNode) IsLeaf

func (n *MemPrefixNode) IsLeaf() bool

func (*MemPrefixNode) Key

func (n *MemPrefixNode) Key() *cf.Bitstring

func (*MemPrefixNode) Parent

func (n *MemPrefixNode) Parent() (PrefixNode, bool, error)

func (*MemPrefixNode) SValues

func (n *MemPrefixNode) SValues() []*cf.Zp

func (*MemPrefixNode) Size

func (n *MemPrefixNode) Size() int

type MemPrefixTree

type MemPrefixTree struct {
	PTreeConfig
	// contains filtered or unexported fields
}

func (*MemPrefixTree) Close

func (t *MemPrefixTree) Close() error

func (*MemPrefixTree) Create

func (t *MemPrefixTree) Create() error

func (*MemPrefixTree) Drop

func (t *MemPrefixTree) Drop() error

func (*MemPrefixTree) Init

func (t *MemPrefixTree) Init()

Init configures the tree with default settings if not already set, and initializes the internal state with sample data points, root node, etc.

func (*MemPrefixTree) Insert

func (t *MemPrefixTree) Insert(z *cf.Zp) error

Insert a Z/Zp integer into the prefix tree

func (*MemPrefixTree) Node

func (t *MemPrefixTree) Node(bs *cf.Bitstring) (PrefixNode, error)

func (*MemPrefixTree) Points

func (t *MemPrefixTree) Points() []*cf.Zp

func (*MemPrefixTree) Remove

func (t *MemPrefixTree) Remove(z *cf.Zp) error

Remove a Z/Zp integer from the prefix tree

func (*MemPrefixTree) Root

func (t *MemPrefixTree) Root() (PrefixNode, error)

type MsgType

type MsgType uint8

func (MsgType) String

func (mt MsgType) String() string

type PTreeConfig

type PTreeConfig struct {
	ThreshMult int `toml:"threshMult"`
	BitQuantum int `toml:"bitQuantum"`
	MBar       int `toml:"mBar"`
}

func (*PTreeConfig) JoinThreshold

func (c *PTreeConfig) JoinThreshold() int

JoinThreshold returns the minimum cumulative number of elements under a prefix tree parent node, below which all child nodes are merged into the parent.

func (*PTreeConfig) NumSamples

func (c *PTreeConfig) NumSamples() int

NumSamples returns the number of sample points used for interpolation. This must match among all reconciliation peers.

func (*PTreeConfig) SplitThreshold

func (c *PTreeConfig) SplitThreshold() int

SplitThreshold returns the maximum number of elements a prefix tree node may contain before creating child nodes and distributing the elements among them.

type Partner

type Partner struct {
	HTTPAddr  string  `toml:"httpAddr"`
	HTTPNet   netType `toml:"httpNet" json:"-"`
	ReconAddr string  `toml:"reconAddr"`
	ReconNet  netType `toml:"reconNet" json:"-"`
}

type PartnerMap

type PartnerMap map[string]Partner

type Peer

type Peer struct {
	RecoverChan RecoverChan
	// contains filtered or unexported fields
}

func NewMemPeer

func NewMemPeer() *Peer

func NewPeer

func NewPeer(settings *Settings, tree PrefixTree) *Peer

func (*Peer) Accept

func (p *Peer) Accept(conn net.Conn) (_err error)

func (*Peer) Flush

func (p *Peer) Flush()

func (*Peer) Gossip

func (p *Peer) Gossip() error

Gossip with remote servers, acting as a client.

func (*Peer) InitiateRecon

func (p *Peer) InitiateRecon(addr net.Addr) error

func (*Peer) Insert

func (p *Peer) Insert(zs ...*cf.Zp)

func (*Peer) Remove

func (p *Peer) Remove(zs ...*cf.Zp)

func (*Peer) Serve

func (p *Peer) Serve() error

func (*Peer) SetMutatedFunc

func (p *Peer) SetMutatedFunc(f func())

func (*Peer) Start

func (p *Peer) Start()

func (*Peer) StartMode

func (p *Peer) StartMode(mode PeerMode)

func (*Peer) Stop

func (p *Peer) Stop() error

type PeerMode

type PeerMode string

type PrefixNode

type PrefixNode interface {
	Config() *PTreeConfig
	Parent() (PrefixNode, bool, error)
	Key() *cf.Bitstring
	Elements() ([]*cf.Zp, error)
	Size() int
	Children() ([]PrefixNode, error)
	SValues() []*cf.Zp
	IsLeaf() bool
}

func Find

func Find(t PrefixTree, z *cf.Zp) (PrefixNode, error)

func MustChildren

func MustChildren(node PrefixNode) []PrefixNode

type PrefixTree

type PrefixTree interface {
	Init()
	Create() error
	Drop() error
	Close() error
	Points() []*cf.Zp
	Root() (PrefixNode, error)
	Node(key *cf.Bitstring) (PrefixNode, error)
	Insert(z *cf.Zp) error
	Remove(z *cf.Zp) error
}

type ReconMsg

type ReconMsg interface {
	MsgType() MsgType
	// contains filtered or unexported methods
}

func ReadMsg

func ReadMsg(r io.Reader) (msg ReconMsg, err error)

type ReconRqstFull

type ReconRqstFull struct {
	Prefix   *cf.Bitstring
	Elements *cf.ZSet
}

func (*ReconRqstFull) MsgType

func (msg *ReconRqstFull) MsgType() MsgType

func (*ReconRqstFull) String

func (msg *ReconRqstFull) String() string

type ReconRqstPoly

type ReconRqstPoly struct {
	Prefix  *cf.Bitstring
	Size    int
	Samples []*cf.Zp
}

func (*ReconRqstPoly) MsgType

func (msg *ReconRqstPoly) MsgType() MsgType

func (*ReconRqstPoly) String

func (msg *ReconRqstPoly) String() string

type Recover

type Recover struct {
	RemoteAddr     net.Addr
	RemoteConfig   *Config
	RemoteElements []*cf.Zp
}

func (*Recover) HkpAddr

func (r *Recover) HkpAddr() (string, error)

func (*Recover) String

func (r *Recover) String() string

type RecoverChan

type RecoverChan chan *Recover

type Settings

type Settings struct {
	PTreeConfig

	Version    string     `toml:"version"`
	LogName    string     `toml:"logname" json:"-"`
	HTTPAddr   string     `toml:"httpAddr"`
	HTTPNet    netType    `toml:"httpNet" json:"-"`
	ReconAddr  string     `toml:"reconAddr"`
	ReconNet   netType    `toml:"reconNet" json:"-"`
	Partners   PartnerMap `toml:"partner"`
	AllowCIDRs []string   `toml:"allowCIDRs"`
	Filters    []string   `toml:"filters"`

	// Backwards-compatible keys
	CompatHTTPPort     int      `toml:"httpPort" json:"-"`
	CompatReconPort    int      `toml:"reconPort" json:"-"`
	CompatPartnerAddrs []string `toml:"partners" json:"-"`

	GossipIntervalSecs          int `toml:"gossipIntervalSecs" json:"-"`
	MaxOutstandingReconRequests int `toml:"maxOutstandingReconRequests" json:"-"`
}

Settings holds the configuration settings for the local reconciliation peer.

func DefaultSettings

func DefaultSettings() *Settings

DefaultSettings returns default peer configuration settings.

func ParseSettings

func ParseSettings(data string) (*Settings, error)

ParseSettings parses a TOML-formatted string representation into Settings.

func (*Settings) Config

func (s *Settings) Config() (*Config, error)

Config returns a recon protocol config message that described this peer's configuration settings.

func (*Settings) Matcher

func (s *Settings) Matcher() (IPMatcher, error)

func (*Settings) PartnerAddrs

func (s *Settings) PartnerAddrs() ([]net.Addr, error)

PartnerAddrs returns the resolved network addresses of configured partner peers.

func (*Settings) Resolve

func (s *Settings) Resolve() error

Resolve resolves network addresses and backwards-compatible settings. Use Resolve after decoding from TOML.

type SyncFail

type SyncFail struct {
	// contains filtered or unexported fields
}

func (*SyncFail) MsgType

func (msg *SyncFail) MsgType() MsgType

func (*SyncFail) String

func (msg *SyncFail) String() string

Directories

Path Synopsis
Package leveldb provides a key-value storage implementation of the recon prefix tree interface.
Package leveldb provides a key-value storage implementation of the recon prefix tree interface.
Package testing provides some unit-testing support functions.
Package testing provides some unit-testing support functions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL