discovery

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Apr 14, 2023 License: AGPL-3.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Discoverer

type Discoverer interface {
	Initializer
	Closer
	TopologyGetter
	// Adds a listener that will be invoked when there are changes in the number of replicas change.
	// The func will be invoked using in a single thread, if there are multiple changes it will be invoked sequentially
	RegisterListener(l TopologyChangeListener)
}

Discoverer provides the cluster topology information.

It emits events that others like Gossipper listens to.

func NewDiscoverer

func NewDiscoverer(config conf.DiscovererConfig, localDb localdb.Client) Discoverer

type GenerationState

type GenerationState interface {
	// Generation gets a snapshot of the active generation by token.
	// This is part of the hot path.
	Generation(token Token) *Generation

	// GenerationInfo gets the information of a past committed generation.
	// Returns nil when not found.
	GenerationInfo(id GenId) *Generation

	// For an old generation, get's the following generation (or two in the case of split).
	// Returns nil when not found.
	NextGeneration(id GenId) []Generation

	// GenerationProposed reads a snapshot of the current committed and proposed generations
	GenerationProposed(token Token) (committed *Generation, proposed *Generation)

	// SetProposed compares and sets the proposed/accepted generation.
	// It's possible to accept multiple generations in the same operation by providing gen2.
	//
	// Checks that the previous tx matches or is nil.
	// Also checks that provided gen.version is equal to committed plus one.
	SetGenerationProposed(gen *Generation, gen2 *Generation, expectedTx *UUID) error

	// SetAsCommitted sets the transaction as committed, storing the history and
	// setting the proposed generation as committed
	//
	// Returns an error when transaction does not match
	SetAsCommitted(token1 Token, token2 *Token, tx UUID, origin int) error

	// Sets the transaction as committed, storing the history, without checking proposed values.
	// This can only be called when no other concurrent changes can be made to the generations.
	//
	// Returns an error when the data could not be persisted
	RepairCommitted(gen *Generation) error

	// Determines whether there's active range containing (but not starting) the token
	IsTokenInRange(token Token) bool

	// Determines whether there's history matching the token
	HasTokenHistory(token Token, clusterSize int) (bool, error)

	// Gets the last known committed token from the local persistence
	GetTokenHistory(token Token, clusterSize int) (*Generation, error)

	// Gets the parent token and range for any given token+range based on the generation information
	// For example: T3/0 -> T0/2.
	// When there is no parent, it returns a nil slice
	ParentRanges(gen *Generation, indices []RangeIndex) []GenerationRanges
}

type TopologyChangeListener

type TopologyChangeListener interface {
	OnTopologyChange(previousTopology *TopologyInfo, newTopology *TopologyInfo)
}

type TopologyGetter

type TopologyGetter interface {
	GenerationState

	// Leader gets the current leader and followers of a given partition key.
	//
	// In case partitionKey is empty, the current node is provided
	Leader(partitionKey string) ReplicationInfo

	// LocalInfo returns the information of the current broker (self)
	LocalInfo() *BrokerInfo

	// Returns broker information from current or previous topology
	CurrentOrPastBroker(ordinal int) *BrokerInfo

	// Returns a point-in-time list of all brokers and local info.
	Topology() *TopologyInfo

	// Returns a point-in-time list of all brokers.
	//
	// The slice is sorted in natural order (i.e. 0, 3, 1, 4, 2, 5)
	Brokers() []BrokerInfo
}

Jump to

Keyboard shortcuts

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