hosttree

package
v0.10.1 Latest Latest
Warning

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

Go to latest
Published: Feb 26, 2024 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// IPv4FilterRange is the number of bits within an IP address (starting
	// from the left) which have to be unique for the host not to be filtered.
	IPv4FilterRange = 24
	// IPv6FilterRange is the number of bits within an IP address (starting
	// from the left) which have to be unique for the host not to be filtered.
	IPv6FilterRange = 54
)

Variables

View Source
var (
	// ErrHostExists is returned if an Insert is called with a public key that
	// already exists in the tree.
	ErrHostExists = errors.New("host already exists in the tree")

	// ErrNoSuchHost is returned if Remove is called with a public key that does
	// not exist in the tree.
	ErrNoSuchHost = errors.New("no host with specified public key")
)

Functions

This section is empty.

Types

type Filter

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

Filter filters host addresses which belong to the same subnet to avoid selecting hosts from the same region.

func NewFilter

func NewFilter() *Filter

NewFilter creates a new addressFilter object.

func (*Filter) Add

func (af *Filter) Add(host modules.NetAddress)

Add adds a host to the filter. This will resolve the hostname into one or more IP addresses, extract the subnets used by those addresses and add the subnets to the filter. Add doesn't return an error, but if the addresses of a host can't be resolved it will be handled as if the host had no addresses associated with it.

func (*Filter) Filtered

func (af *Filter) Filtered(host modules.NetAddress) bool

Filtered checks if a host uses a subnet that is already in use by a host that was previously added to the filter. If it is in use, or if the host is associated with 2 addresses of the same type (e.g. IPv4 and IPv4) or if it is associated with more than 2 addresses, Filtered will return 'true'.

func (*Filter) Reset

func (af *Filter) Reset()

Reset clears the filter's contents.

type HostAdjustments

type HostAdjustments struct {
	AgeAdjustment              float64
	CollateralAdjustment       float64
	InteractionAdjustment      float64
	PriceAdjustment            float64
	StorageRemainingAdjustment float64
	UptimeAdjustment           float64
	VersionAdjustment          float64
}

HostAdjustments contains all the adjustments relevant to a host's score and implements the scoreBreakdown interface.

func (HostAdjustments) HostScoreBreakdown

func (h HostAdjustments) HostScoreBreakdown() modules.HostScoreBreakdown

HostScoreBreakdown converts a HostAdjustments object into a modules.HostScoreBreakdown.

func (HostAdjustments) Score

func (h HostAdjustments) Score() types.Currency

Score combines the individual adjustments of the breakdown into a single score.

type HostTree

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

HostTree is used to store and select host database entries. Each HostTree is initialized with a scoring func that is able to assign a score to each entry. The entries can then be selected at random, scored by the score func.

func New

func New(sf ScoreFunc, log *persist.Logger) *HostTree

New creates a new HostTree given a score function.

func (*HostTree) All

func (ht *HostTree) All() []modules.HostDBEntry

All returns all of the hosts in the host tree, sorted by score.

func (*HostTree) Insert

func (ht *HostTree) Insert(hdbe modules.HostDBEntry) error

Insert inserts the entry provided to `entry` into the host tree. Insert will return an error if the input host already exists.

func (*HostTree) Modify

func (ht *HostTree) Modify(hdbe modules.HostDBEntry) error

Modify updates a host entry at the given public key, replacing the old entry with the entry provided by `newEntry`.

func (*HostTree) Remove

func (ht *HostTree) Remove(pk types.PublicKey) error

Remove removes the host with the public key provided by `pk`.

func (*HostTree) Select

func (ht *HostTree) Select(pk types.PublicKey) (modules.HostDBEntry, bool)

Select returns the host with the provided public key, should the host exist.

func (*HostTree) SelectRandom

func (ht *HostTree) SelectRandom(n int, blacklist, addressBlacklist []types.PublicKey) []modules.HostDBEntry

SelectRandom grabs a random n hosts from the tree. There will be no repeats, but the length of the slice returned may be less than n, and may even be zero. The hosts that are returned first have the higher priority.

Hosts passed to 'blacklist' will not be considered; pass `nil` if no blacklist is desired. 'addressBlacklist' is similar to 'blacklist' but instead of not considering the hosts in the list, hosts that use the same IP subnet as those hosts will be ignored. In most cases those blacklists contain the same elements but sometimes it is useful to block a host without blocking its IP range.

Hosts with a score of 1 will be ignored. 1 is the lowest score possible, at which point it's impossible to distinguish between hosts. Any sane scoring system should always have scores greater than 1 unless the host is intentionally being given a low score to indicate that the host should not be used.

func (*HostTree) SetFiltered

func (ht *HostTree) SetFiltered(pubKey types.PublicKey, filtered bool) error

SetFiltered updates a host entry filtered field.

func (*HostTree) SetScoreFunction

func (ht *HostTree) SetScoreFunction(sf ScoreFunc) error

SetScoreFunction resets the HostTree and assigns it a new score function. This resets the tree and reinserts all the hosts.

type ScoreBreakdown

type ScoreBreakdown interface {
	HostScoreBreakdown() modules.HostScoreBreakdown
	Score() types.Currency
}

ScoreBreakdown is an interface that allows us to mock the hostAdjustments during testing.

type ScoreFunc

type ScoreFunc func(modules.HostDBEntry) ScoreBreakdown

ScoreFunc is a function used to score a given HostDBEntry in the tree.

Jump to

Keyboard shortcuts

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