storj/pkg/overlay/config.go
Ivan Fraixedes f624b213a3
reputation: Add configuration parameters (#2150)
* reputation: Add configuration parameters
 Add the configuration parameters which will be used by the algorithm
 which will calculate the storage node reputation.
 Because the reputation calculation is based on audit and uptime check
 results some configuration parameters are in pkg/audit, others in
 pkg/discovery and other in the satellite which will combine the both
 reputation results to obtain the storage node reputation for repair and
 uplink.
* satellite-config: Refresh lock file with new params
  Refresh the Satellite configuration yaml lock file with the new
  parameters added in this branch.
2019-06-11 12:14:01 +02:00

77 lines
4.0 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package overlay
import (
"strings"
"time"
"github.com/zeebo/errs"
monkit "gopkg.in/spacemonkeygo/monkit.v2"
"storj.io/storj/pkg/storj"
)
var (
mon = monkit.Package()
// Error represents an overlay error
Error = errs.Class("overlay error")
)
// Config is a configuration struct for everything you need to start the
// Overlay cache responsibility.
type Config struct {
Node NodeSelectionConfig
}
// LookupConfig is a configuration struct for querying the overlay cache with one or more node IDs
type LookupConfig struct {
NodeIDsString string `help:"one or more string-encoded node IDs, delimited by Delimiter"`
Delimiter string `help:"delimiter used for parsing node IDs" default:","`
}
// NodeSelectionConfig is a configuration struct to determine the minimum
// values for nodes to select
type NodeSelectionConfig struct {
UptimeRatio float64 `help:"a node's ratio of being up/online vs. down/offline" releaseDefault:"0.9" devDefault:"0"`
UptimeCount int64 `help:"the number of times a node's uptime has been checked to not be considered a New Node" releaseDefault:"500" devDefault:"0"`
AuditSuccessRatio float64 `help:"a node's ratio of successful audits" releaseDefault:"0.4" devDefault:"0"` // TODO: update after beta
AuditCount int64 `help:"the number of times a node has been audited to not be considered a New Node" releaseDefault:"500" devDefault:"0"`
NewNodePercentage float64 `help:"the percentage of new nodes allowed per request" default:"0.05"` // TODO: fix, this is not percentage, it's ratio
MinimumVersion string `help:"the minimum node software version for node selection queries" default:""`
OnlineWindow time.Duration `help:"the amount of time without seeing a node before its considered offline" default:"1h"`
DistinctIP bool `help:"require distinct IPs when choosing nodes for upload" releaseDefault:"true" devDefault:"false"`
ReputationAuditRepairWeight float64 `help:"weight to apply to audit reputation for total repair reputation calculation" default:"1.0"`
ReputationAuditUplinkWeight float64 `help:"weight to apply to audit reputation for total uplink reputation calculation" default:"1.0"`
ReputationAuditAlpha0 float64 `help:"the initial shape 'alpha' used to calculate audit SNs reputation" default:"1.0"`
ReputationAuditBeta0 float64 `help:"the initial shape 'beta' value used to calculate audit SNs reputation" default:"0.0"`
ReputationAuditLambda float64 `help:"the forgetting factor used to calculate the audit SNs reputation" default:"1.0"`
ReputationAuditOmega float64 `help:"the normalization weight used to calculate the audit SNs reputation" default:"1.0"`
ReputationUptimeRepairWeight float64 `help:"weight to apply to uptime reputation for total repair reputation calculation" default:"1.0"`
ReputationUptimeUplinkWeight float64 `help:"weight to apply to uptime reputation for total uplink reputation calculation" default:"1.0"`
ReputationUptimeAlpha0 float64 `help:"the initial shape 'alpha' used to calculate uptime SNs reputation" default:"1.0"`
ReputationUptimeBeta0 float64 `help:"the initial shape 'beta' value used to calculate uptime SNs reputation" default:"0.0"`
ReputationUptimeLambda float64 `help:"the forgetting factor used to calculate the uptime SNs reputation" default:"1.0"`
ReputationUptimeOmega float64 `help:"the normalization weight used to calculate the uptime SNs reputation" default:"1.0"`
}
// ParseIDs converts the base58check encoded node ID strings from the config into node IDs
func (c LookupConfig) ParseIDs() (ids storj.NodeIDList, err error) {
var idErrs []error
idStrs := strings.Split(c.NodeIDsString, c.Delimiter)
for _, s := range idStrs {
id, err := storj.NodeIDFromString(s)
if err != nil {
idErrs = append(idErrs, err)
continue
}
ids = append(ids, id)
}
if err := errs.Combine(idErrs...); err != nil {
return nil, err
}
return ids, nil
}