Documentation ¶
Index ¶
Constants ¶
const ( // MinPercentConnectedBuffer is the safety buffer for calculation of // MinPercentConnected. This increases the required percentage above // alpha/k. This value must be [0-1]. // 0 means MinPercentConnected = alpha/k. // 1 means MinPercentConnected = 1 (fully connected). MinPercentConnectedBuffer = .2 )
Variables ¶
var ( DefaultParameters = Parameters{ K: 20, Alpha: 15, BetaVirtuous: 15, BetaRogue: 20, ConcurrentRepolls: 4, OptimalProcessing: 10, MaxOutstandingItems: 256, MaxItemProcessingTime: 30 * time.Second, } ErrParametersInvalid = errors.New("parameters invalid") )
Functions ¶
This section is empty.
Types ¶
type BinarySlush ¶
type BinarySlush interface { fmt.Stringer // Takes in the initial choice Initialize(initialPreference int) // Returns the currently preferred choice to be finalized Preference() int // RecordSuccessfulPoll records a successful poll towards finalizing the // specified choice RecordSuccessfulPoll(choice int) }
BinarySlush is a slush instance deciding between two values. After performing a network sample of k nodes, if you have alpha votes for one of the choices, you should vote for that choice.
type BinarySnowball ¶
type BinarySnowball interface{ BinarySnowflake }
BinarySnowball augments BinarySnowflake with a counter that tracks the total number of positive responses from a network sample.
type BinarySnowflake ¶
type BinarySnowflake interface { fmt.Stringer // Takes in the beta value, and the initial choice Initialize(beta, initialPreference int) // Returns the currently preferred choice to be finalized Preference() int // RecordSuccessfulPoll records a successful poll towards finalizing the // specified choice RecordSuccessfulPoll(choice int) // RecordUnsuccessfulPoll resets the snowflake counter of this instance RecordUnsuccessfulPoll() // Return whether a choice has been finalized Finalized() bool }
BinarySnowflake is a snowball instance deciding between two values After performing a network sample of k nodes, if you have alpha votes for one of the choices, you should vote for that choice. Otherwise, you should reset.
type Consensus ¶
type Consensus interface { fmt.Stringer // Takes in alpha, beta1, beta2, and the initial choice Initialize(params Parameters, initialPreference ids.ID) // Adds a new choice to vote on Add(newChoice ids.ID) // Returns the currently preferred choice to be finalized Preference() ids.ID // RecordPoll records the results of a network poll. Assumes all choices // have been previously added. // // If the consensus instance was not previously finalized, this function // will return true if the poll was successful and false if the poll was // unsuccessful. // // If the consensus instance was previously finalized, the function may // return true or false. RecordPoll(votes bag.Bag[ids.ID]) bool // RecordUnsuccessfulPoll resets the snowflake counters of this consensus // instance RecordUnsuccessfulPoll() // Return whether a choice has been finalized Finalized() bool }
Consensus represents a general snow instance that can be used directly to process the results of network queries.
type Factory ¶
type Factory interface {
New() Consensus
}
Factory returns new instances of Consensus
type Flat ¶
type Flat struct {
// contains filtered or unexported fields
}
Flat is a naive implementation of a multi-choice snowball instance
func (*Flat) Initialize ¶
func (f *Flat) Initialize(params Parameters, choice ids.ID)
func (*Flat) Preference ¶
func (*Flat) RecordSuccessfulPoll ¶
type FlatFactory ¶
type FlatFactory struct{}
FlatFactory implements Factory by returning a flat struct
func (FlatFactory) New ¶
func (FlatFactory) New() Consensus
type NnarySlush ¶
type NnarySlush interface { fmt.Stringer // Takes in the initial choice Initialize(initialPreference ids.ID) // Returns the currently preferred choice to be finalized Preference() ids.ID // RecordSuccessfulPoll records a successful poll towards finalizing the // specified choice. Assumes the choice was previously added. RecordSuccessfulPoll(choice ids.ID) }
NnarySlush is a slush instance deciding between an unbounded number of values. After performing a network sample of k nodes, if you have alpha votes for one of the choices, you should vote for that choice.
type NnarySnowball ¶
type NnarySnowball interface{ NnarySnowflake }
NnarySnowball augments NnarySnowflake with a counter that tracks the total number of positive responses from a network sample.
type NnarySnowflake ¶
type NnarySnowflake interface { fmt.Stringer // Takes in beta1, beta2, and the initial choice Initialize(betaVirtuous, betaRogue int, initialPreference ids.ID) // Adds a new possible choice Add(newChoice ids.ID) // Returns the currently preferred choice to be finalized Preference() ids.ID // RecordSuccessfulPoll records a successful poll towards finalizing the // specified choice. Assumes the choice was previously added. RecordSuccessfulPoll(choice ids.ID) // RecordUnsuccessfulPoll resets the snowflake counter of this instance RecordUnsuccessfulPoll() // Return whether a choice has been finalized Finalized() bool }
NnarySnowflake is a snowflake instance deciding between an unbounded number of values. After performing a network sample of k nodes, if you have alpha votes for one of the choices, you should vote for that choice. Otherwise, you should reset.
type Parameters ¶
type Parameters struct { K int `json:"k" yaml:"k"` Alpha int `json:"alpha" yaml:"alpha"` BetaVirtuous int `json:"betaVirtuous" yaml:"betaVirtuous"` BetaRogue int `json:"betaRogue" yaml:"betaRogue"` ConcurrentRepolls int `json:"concurrentRepolls" yaml:"concurrentRepolls"` OptimalProcessing int `json:"optimalProcessing" yaml:"optimalProcessing"` // Reports unhealthy if more than this number of items are outstanding. MaxOutstandingItems int `json:"maxOutstandingItems" yaml:"maxOutstandingItems"` // Reports unhealthy if there is an item processing for longer than this // duration. MaxItemProcessingTime time.Duration `json:"maxItemProcessingTime" yaml:"maxItemProcessingTime"` }
Parameters required for snowball consensus
func (Parameters) MinPercentConnectedHealthy ¶
func (p Parameters) MinPercentConnectedHealthy() float64
func (Parameters) Verify ¶
func (p Parameters) Verify() error
Verify returns nil if the parameters describe a valid initialization.
type Tree ¶
type Tree struct {
// contains filtered or unexported fields
}
Tree implements the snowball interface by using a modified patricia tree.
func (*Tree) Initialize ¶
func (t *Tree) Initialize(params Parameters, choice ids.ID)
func (*Tree) RecordUnsuccessfulPoll ¶
func (t *Tree) RecordUnsuccessfulPoll()
type TreeFactory ¶
type TreeFactory struct{}
TreeFactory implements Factory by returning a tree struct
func (TreeFactory) New ¶
func (TreeFactory) New() Consensus
type UnarySnowball ¶
type UnarySnowball interface { fmt.Stringer // Takes in the beta value Initialize(beta int) // RecordSuccessfulPoll records a successful poll towards finalizing RecordSuccessfulPoll() // RecordUnsuccessfulPoll resets the snowflake counter of this instance RecordUnsuccessfulPoll() // Return whether a choice has been finalized Finalized() bool // Returns a new binary snowball instance with the agreement parameters // transferred. Takes in the new beta value and the original choice Extend(beta, originalPreference int) BinarySnowball // Returns a new unary snowball instance with the same state Clone() UnarySnowball }
UnarySnowball is a snowball instance deciding on one value. After performing a network sample of k nodes, if you have alpha votes for the choice, you should vote. Otherwise, you should reset.
type UnarySnowflake ¶
type UnarySnowflake interface { fmt.Stringer // Takes in the beta value Initialize(beta int) // RecordSuccessfulPoll records a successful poll towards finalizing RecordSuccessfulPoll() // RecordUnsuccessfulPoll resets the snowflake counter of this instance RecordUnsuccessfulPoll() // Return whether a choice has been finalized Finalized() bool // Returns a new binary snowball instance with the agreement parameters // transferred. Takes in the new beta value and the original choice Extend(beta, originalPreference int) BinarySnowflake // Returns a new unary snowflake instance with the same state Clone() UnarySnowflake }
UnarySnowflake is a snowflake instance deciding on one value. After performing a network sample of k nodes, if you have alpha votes for the choice, you should vote. Otherwise, you should reset.