Documentation ¶
Index ¶
- type Config
- func (cfg Config) WithConnectTimeAlpha(alpha float64) *Config
- func (cfg Config) WithConnectTimeWeight(weight float64) *Config
- func (cfg Config) WithDefaultProviderConfig(providerConfig ProviderConfig) *Config
- func (cfg Config) WithFirstByteTimeAlpha(alpha float64) *Config
- func (cfg Config) WithFirstByteTimeWeight(weight float64) *Config
- func (cfg Config) WithGraphsyncFastRetrievalWeight(weight float64) *Config
- func (cfg Config) WithGraphsyncVerifiedDealWeight(weight float64) *Config
- func (cfg Config) WithOverallConnectTimeAlpha(alpha float64) *Config
- func (cfg Config) WithOverallFirstByteTimeAlpha(alpha float64) *Config
- func (cfg Config) WithProviderAllowList(allowlist map[peer.ID]bool) *Config
- func (cfg Config) WithProviderBlockList(blocklist map[peer.ID]bool) *Config
- func (cfg Config) WithProviderConfigs(providerConfigs map[peer.ID]ProviderConfig) *Config
- func (cfg Config) WithSuccessAlpha(alpha float64) *Config
- func (cfg Config) WithSuccessWeight(weight float64) *Config
- func (cfg Config) WithoutRandomness() *Config
- type ProviderConfig
- type Random
- type Session
- type SessionState
- func (spt *SessionState) AddToRetrieval(retrievalId types.RetrievalID, storageProviderIds []peer.ID) error
- func (spt *SessionState) ChooseNextProvider(peers []peer.ID, mda []metadata.Protocol) int
- func (spt *SessionState) EndRetrieval(retrievalId types.RetrievalID) error
- func (spt *SessionState) GetConcurrency(storageProviderId peer.ID) uint
- func (spt *SessionState) RecordConnectTime(storageProviderId peer.ID, current time.Duration)
- func (spt *SessionState) RecordFailure(retrievalId types.RetrievalID, storageProviderId peer.ID) error
- func (spt *SessionState) RecordFirstByteTime(storageProviderId peer.ID, current time.Duration)
- func (spt *SessionState) RecordSuccess(storageProviderId peer.ID, bandwidthBytesPerSecond uint64)
- func (spt *SessionState) RegisterRetrieval(retrievalId types.RetrievalID, cid cid.Cid, selector datamodel.Node) bool
- type State
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { ProviderBlockList map[peer.ID]bool ProviderAllowList map[peer.ID]bool DefaultProviderConfig ProviderConfig ProviderConfigs map[peer.ID]ProviderConfig // Random is an optional rng, if nil, math/rand will be used. Random Random // ConnectTimeAlpha is the alpha value for the exponential moving average // of the connect time for a storage provider. The connect time is the time // it takes to connect to a storage provider, it is used to determine the // prioritisation of storage providers. The value determines the weight of // previous connect times, a lower value will give more weight to recent // connect times. A value of 0 will only use the most recent connect time. ConnectTimeAlpha float64 // FirstByteTimeAlpha is the alpha value for the exponential moving average // of the time to first byte for a storage provider. The time to first byte // is the time it takes to receive the first byte of data from a storage // provider, it is used to determine the prioritisation of storage // providers. The value determines the weight of previous time to first // bytes, a lower value will give more weight to recent time to first bytes. // A value of 0 will only use the most recent time to first byte. FirstByteTimeAlpha float64 // OverallConnectTimeAlpha is the alpha value for the exponential moving // average of the overall connect time. The overall connect time is the // average connect time of *all* storage providers, used to normalise the // connect time metric. OverallConnectTimeAlpha float64 // OverallFirstByteTimeAlpha is the alpha value for the exponential moving // average of the overall time to first byte. The overall time to first byte // is the average time to first byte of *all* storage providers, used to // normalise the time to first byte metric. OverallFirstByteTimeAlpha float64 // BandwidthAlpha is the alpha value for the exponential moving average of // the bandwidth metric for a storage provider. The bandwidth metric is // measured in bytes per second. The value of BandwidthAlpha determines the // weight of previous bandwidth metrics, a lower value will give more weight // to recent bandwidth metrics. A value of 0 will only use the most recent // bandwidth metric. BandwidthAlpha float64 // OverallBandwidthAlpha is the alpha value for the exponential moving // average of the overall bandwidth metric. The overall bandwidth metric is // the average bandwidth of *all* storage providers, used to normalise the // bandwidth metric. OverallBandwidthAlpha float64 // SuccessAlpha is the alpha value for the exponential moving average of // the success metric for a storage provider. The success metric is the // ratio of successful retrievals to total retrievals. The value determines // the weight of previous success metrics, a lower value will give more // weight to recent success metrics. A value of 0 will only use the most // recent success metric. SuccessAlpha float64 // GraphsyncVerifiedDealWeight is the scoring weight applied when a // graphsync candidate has a VerifiedDeal metadata. The weight is a // multiplier of the base value of `1.0` when VerifiedDeal is found. GraphsyncVerifiedDealWeight float64 // GraphsyncFastRetrievalWeight is the scoring weight applied when a // graphsync candidate has a FastRetrieval metadata. The weight is a // multiplier of the base value of `1.0` when FastRetrieval is found. GraphsyncFastRetrievalWeight float64 // ConnectTimeWeight is the scoring weight applied to the connect time // exponential moving average for the candidate at time of scoring. The // weight is a multiplier the base value, which should be a normalised // score in the range of [0, 1]. ConnectTimeWeight float64 // FirstByteTimeWeight is the scoring weight applied to the time to first // byte exponential moving average for the candidate at time of scoring. The // weight is a multiplier the base value, which should be a normalised // score in the range of [0, 1]. FirstByteTimeWeight float64 // BandwidthWeight is the scoring weight applied to the bandwidth // exponential moving average for the candidate at time of scoring. The // weight is a multiplier the base value, which should be a normalised // score in the range of [0, 1]. BandwidthWeight float64 // SuccessWeight is the scoring weight applied to the success exponential // moving average for the candidate at time of scoring. The weight is a // multiplier the base value, which should be a normalised score in the // range of [0, 1] (where each failure contributes a 0 and each success // contributes a 1). SuccessWeight float64 }
All config values should be safe to leave uninitialized
func DefaultConfig ¶ added in v0.11.0
func DefaultConfig() *Config
DefaultConfig returns a default config with usable alpha and weight values.
func (Config) WithConnectTimeAlpha ¶ added in v0.12.0
WithConnectTimeAlpha sets the connect time alpha.
func (Config) WithConnectTimeWeight ¶ added in v0.12.0
WithConnectTimeWeight sets the connect time weight.
func (Config) WithDefaultProviderConfig ¶ added in v0.12.0
func (cfg Config) WithDefaultProviderConfig(providerConfig ProviderConfig) *Config
WithDefaultProviderConfig sets the default provider config.
func (Config) WithFirstByteTimeAlpha ¶ added in v0.12.0
WithFirstByteTimeAlpha sets the time to first byte alpha.
func (Config) WithFirstByteTimeWeight ¶ added in v0.12.0
WithFirstByteTimeWeight sets the time to first byte weight.
func (Config) WithGraphsyncFastRetrievalWeight ¶ added in v0.12.0
WithGraphsyncFastRetrievalWeight sets the fast retrieval weight.
func (Config) WithGraphsyncVerifiedDealWeight ¶ added in v0.12.0
WithGraphsyncVerifiedDealWeight sets the verified deal weight.
func (Config) WithOverallConnectTimeAlpha ¶ added in v0.12.0
WithOverallConnectTimeAlpha sets the overall connect time alpha.
func (Config) WithOverallFirstByteTimeAlpha ¶ added in v0.12.0
WithOverallFirstByteTimeAlpha sets the overall time to first byte alpha.
func (Config) WithProviderAllowList ¶ added in v0.12.0
WithProviderAllowList sets the provider allowlist.
func (Config) WithProviderBlockList ¶ added in v0.12.0
WithProviderBlockList sets the provider blocklist.
func (Config) WithProviderConfigs ¶ added in v0.12.0
func (cfg Config) WithProviderConfigs(providerConfigs map[peer.ID]ProviderConfig) *Config
WithProviderConfigs sets the provider configs.
func (Config) WithSuccessAlpha ¶ added in v0.12.0
WithSuccessAlpha sets the success alpha.
func (Config) WithSuccessWeight ¶ added in v0.12.0
WithSuccessWeight sets the success weight.
func (Config) WithoutRandomness ¶ added in v0.12.0
WithoutRandomness removes the dice roll for choosing the best peer, with this set, it will always choose the peer with the highest score.
type ProviderConfig ¶ added in v0.11.0
type Session ¶
type Session struct { State // contains filtered or unexported fields }
Session and State both deal with per-storage provider data and usage questions. While State is responsible for gathering data of ongoing interactions with storage providers and making dynamic decisions based on that information, Session extends it and provides harder rules that arise from configuration and other static heuristics.
func NewSession ¶
NewSession constructs a new Session with the given config and with or without ongoing dynamic data collection. When withState is false, no dynamic data will be collected and decisions will be made solely based on the config.
func (*Session) FilterIndexerCandidate ¶
func (session *Session) FilterIndexerCandidate(candidate types.RetrievalCandidate) (bool, types.RetrievalCandidate)
FilterIndexerCandidate filters out protocols that are not acceptable for the given candidate. It returns a bool indicating whether the candidate should be considered at all, and a new candidate with the filtered protocols.
type SessionState ¶ added in v0.11.0
type SessionState struct {
// contains filtered or unexported fields
}
func NewSessionState ¶ added in v0.11.0
func NewSessionState(config *Config) *SessionState
NewSessionState creates a new SessionState with the given config. If the config is nil, a default config will be used.
func (*SessionState) AddToRetrieval ¶ added in v0.11.0
func (spt *SessionState) AddToRetrieval(retrievalId types.RetrievalID, storageProviderIds []peer.ID) error
func (*SessionState) ChooseNextProvider ¶ added in v0.12.0
func (*SessionState) EndRetrieval ¶ added in v0.11.0
func (spt *SessionState) EndRetrieval(retrievalId types.RetrievalID) error
func (*SessionState) GetConcurrency ¶ added in v0.11.0
func (spt *SessionState) GetConcurrency(storageProviderId peer.ID) uint
func (*SessionState) RecordConnectTime ¶ added in v0.12.0
func (spt *SessionState) RecordConnectTime(storageProviderId peer.ID, current time.Duration)
func (*SessionState) RecordFailure ¶ added in v0.11.0
func (spt *SessionState) RecordFailure(retrievalId types.RetrievalID, storageProviderId peer.ID) error
func (*SessionState) RecordFirstByteTime ¶ added in v0.12.0
func (spt *SessionState) RecordFirstByteTime(storageProviderId peer.ID, current time.Duration)
func (*SessionState) RecordSuccess ¶ added in v0.12.0
func (spt *SessionState) RecordSuccess(storageProviderId peer.ID, bandwidthBytesPerSecond uint64)
func (*SessionState) RegisterRetrieval ¶ added in v0.11.0
func (spt *SessionState) RegisterRetrieval(retrievalId types.RetrievalID, cid cid.Cid, selector datamodel.Node) bool
type State ¶
type State interface { // GetConcurrency returns the number of retrievals the given storage // provider is currently recorded as being involved in. GetConcurrency(storageProviderId peer.ID) uint // RegisterRetrieval registers a retrieval, returning false if the // retrieval for this RetrievalID or this CID already exists, or true if it // is new. RegisterRetrieval(retrievalId types.RetrievalID, cid cid.Cid, selector datamodel.Node) bool // AddToRetrieval adds a set of storage providers to an existing retrieval, // this will increase the concurrency for each of the storage providers // until the retrieval has finished. AddToRetrieval(retrievalId types.RetrievalID, storageProviderIds []peer.ID) error // EndRetrieval cleans up an existing retrieval. EndRetrieval(retrievalId types.RetrievalID) error // RecordConnectTime records the time it took to connect to a storage // provider. This is used for prioritisation of storage providers and is // recorded with a decay according to SessionStateConfig#ConnectTimeAlpha. RecordConnectTime(storageProviderId peer.ID, connectTime time.Duration) // RecordFirstByteTime records the time it took to receive the first byte // from a storage provider. This is used for prioritisation of storage // providers and is recorded with a decay according to // SessionStateConfig#FirstByteTimeAlpha. RecordFirstByteTime(storageProviderId peer.ID, firstByteTime time.Duration) // RecordFailure records a failure for a storage provider. This is used for // prioritisation of storage providers and is recorded as a success=0 with a // decay according to SessionStateConfig#SuccessAlpha. RecordFailure(retrievalId types.RetrievalID, storageProviderId peer.ID) error // RecordSuccess records a success for a storage provider. This is used for // prioritisation of storage providers and is recorded as a success=1 with a // decay according to SessionStateConfig#SuccessAlpha. Bandwidth is also // used for prioritisation and is recorded with a decay according to // SessionStateConfig#BandwidthAlpha. RecordSuccess(storageProviderId peer.ID, bandwidthBytesPerSecond uint64) // ChooseNextProvider compares a list of storage providers and returns the // index of the next storage provider to use. This uses both historically // collected state and information contained within the metadata, depending // on protocol. ChooseNextProvider(peers []peer.ID, metadata []metadata.Protocol) int }
State defines an interface for the collection, monitoring and management of dynamic retrieval information on a per-storage provider basis. It augments a session with dynamic data collection to make decisions based on ongong interactions with storage providers.