Skip to content

Commit

Permalink
satellite/repair: fix segment repairer override configuration
Browse files Browse the repository at this point in the history
Change-Id: I4dda390737a64b5125e00a05c3f7f24e908da8fd
  • Loading branch information
mniewrzal authored and Storj Robot committed Apr 3, 2024
1 parent 2f600f9 commit c460d8e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 12 deletions.
18 changes: 14 additions & 4 deletions satellite/repair/checker/config.go
Expand Up @@ -17,10 +17,10 @@ import (
type Config struct {
Interval time.Duration `help:"how frequently checker should check for bad segments" releaseDefault:"30s" devDefault:"0h0m10s" testDefault:"$TESTINTERVAL"`

ReliabilityCacheStaleness time.Duration `help:"how stale reliable node cache can be" releaseDefault:"5m" devDefault:"5m" testDefault:"1m"`
RepairOverrides RepairOverrides `help:"[DEPRECATED] comma-separated override values for repair threshold in the format k-threshold" releaseDefault:"" devDefault:"" deprecated:"true"`
RepairThresholdOverrides RepairOverrides `help:"comma-separated override values for repair threshold in the format k-threshold" releaseDefault:"29-52" devDefault:""`
RepairTargetOverrides RepairOverrides `help:"comma-separated override values for repair success target in the format k-target" releaseDefault:"29-65" devDefault:""`
ReliabilityCacheStaleness time.Duration `help:"how stale reliable node cache can be" releaseDefault:"5m" devDefault:"5m" testDefault:"1m"`
RepairOverrides RepairOverrides `help:"[DEPRECATED] comma-separated override values for repair threshold in the format k-threshold" releaseDefault:"" devDefault:"" deprecated:"true"`
RepairThresholdOverrides RepairThresholdOverrides `help:"comma-separated override values for repair threshold in the format k-threshold" releaseDefault:"29-52" devDefault:""`
RepairTargetOverrides RepairTargetOverrides `help:"comma-separated override values for repair success target in the format k-target" releaseDefault:"29-65" devDefault:""`
// Node failure rate is an estimation based on a 6 hour checker run interval (4 checker iterations per day), a network of about 9200 nodes, and about 2 nodes churning per day.
// This results in `2/9200/4 = 0.00005435` being the probability of any single node going down in the interval of one checker iteration.
NodeFailureRate float64 `help:"the probability of a single node going down within the next checker iteration" default:"0.00005435" `
Expand All @@ -30,6 +30,16 @@ type Config struct {
DoPlacementCheck bool `help:"Treat pieces out of segment placement as in need of repair" default:"true"`
}

// RepairThresholdOverrides override values for repair threshold.
type RepairThresholdOverrides struct {
RepairOverrides
}

// RepairTargetOverrides override values for repair success target.
type RepairTargetOverrides struct {
RepairOverrides
}

// RepairOverrides is a configuration struct that contains a list of override repair
// values for various given RS combinations of k/o/n (min/success/total).
//
Expand Down
8 changes: 4 additions & 4 deletions satellite/repair/checker/observer.go
Expand Up @@ -41,7 +41,7 @@ type Observer struct {
repairQueue queue.RepairQueue
nodesCache *ReliabilityCache
overlayService *overlay.Service
repairThresholdOverrides RepairOverrides
repairThresholdOverrides RepairThresholdOverrides
nodeFailureRate float64
repairQueueBatchSize int
excludedCountryCodes map[location.CountryCode]struct{}
Expand All @@ -68,7 +68,7 @@ func NewObserver(logger *zap.Logger, repairQueue queue.RepairQueue, overlay *ove

if config.RepairOverrides.String() != "" {
// backwards compatibility
config.RepairThresholdOverrides = config.RepairOverrides
config.RepairThresholdOverrides = RepairThresholdOverrides{config.RepairOverrides}
}

return &Observer{
Expand Down Expand Up @@ -244,7 +244,7 @@ func (observer *Observer) getObserverStats(redundancy storj.RedundancyScheme) *o
return observerStats
}

func loadRedundancy(redundancy storj.RedundancyScheme, repairThresholdOverrides RepairOverrides) (int, int, int, int) {
func loadRedundancy(redundancy storj.RedundancyScheme, repairThresholdOverrides RepairThresholdOverrides) (int, int, int, int) {
repair := int(redundancy.RepairShares)

if overrideValue := repairThresholdOverrides.GetOverrideValue(redundancy); overrideValue != 0 {
Expand All @@ -265,7 +265,7 @@ type observerFork struct {
nodesCache *ReliabilityCache
overlayService *overlay.Service
rsStats map[storj.RedundancyScheme]*partialRSStats
repairThresholdOverrides RepairOverrides
repairThresholdOverrides RepairThresholdOverrides
nodeFailureRate float64
getNodesEstimate func(ctx context.Context) (int, error)
log *zap.Logger
Expand Down
7 changes: 4 additions & 3 deletions satellite/repair/repairer/segments.go
Expand Up @@ -98,9 +98,9 @@ type SegmentRepairer struct {
multiplierOptimalThreshold float64

// repairThresholdOverrides is the set of values configured by the checker to override the repair threshold for various RS schemes.
repairThresholdOverrides checker.RepairOverrides
repairThresholdOverrides checker.RepairThresholdOverrides
// repairTargetOverrides is similar but determines the optimum number of pieces per segment.
repairTargetOverrides checker.RepairOverrides
repairTargetOverrides checker.RepairTargetOverrides

excludedCountryCodes map[location.CountryCode]struct{}

Expand All @@ -123,7 +123,8 @@ func NewSegmentRepairer(
reporter audit.Reporter,
ecRepairer *ECRepairer,
placements nodeselection.PlacementDefinitions,
repairThresholdOverrides, repairTargetOverrides checker.RepairOverrides,
repairThresholdOverrides checker.RepairThresholdOverrides,
repairTargetOverrides checker.RepairTargetOverrides,
config Config,
) *SegmentRepairer {

Expand Down
2 changes: 1 addition & 1 deletion satellite/repairer.go
Expand Up @@ -238,7 +238,7 @@ func NewRepairer(log *zap.Logger, full *identity.FullIdentity,
peer.Audit.Reporter,
peer.EcRepairer,
placement,
config.Checker.RepairTargetOverrides,
config.Checker.RepairThresholdOverrides,
config.Checker.RepairTargetOverrides,
config.Repairer,
)
Expand Down

0 comments on commit c460d8e

Please sign in to comment.