From 92747c57976d797c89c318aa37c026a7ed0c639e Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 20 Mar 2026 10:58:27 -0700 Subject: [PATCH] Add OPENAUDIO_REPAIR_ENABLED and OPENAUDIO_REPAIR_INTERVAL env vars Expose two top-level environment variables to control mediorum repair behavior: - OPENAUDIO_REPAIR_ENABLED (default: true) - set to "false" to disable repair - OPENAUDIO_REPAIR_INTERVAL (default: 1h) - Go duration string for repair cycle interval Co-Authored-By: Claude Opus 4.6 --- pkg/mediorum/mediorum.go | 13 +++++++++++++ pkg/mediorum/server/repair.go | 12 ++++++++++-- pkg/mediorum/server/server.go | 2 ++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkg/mediorum/mediorum.go b/pkg/mediorum/mediorum.go index d5027655..09791f5f 100644 --- a/pkg/mediorum/mediorum.go +++ b/pkg/mediorum/mediorum.go @@ -136,6 +136,17 @@ func runMediorum(lc *lifecycle.Lifecycle, logger *zap.Logger, mediorumEnv string moveFromBlobStoreDSN = getenvWithDefault("OPENAUDIO_STORAGE_DRIVER_URL_MOVE_FROM", os.Getenv("AUDIUS_STORAGE_DRIVER_URL_MOVE_FROM")) } + // Repair configuration + repairEnabled := getenvWithDefault("OPENAUDIO_REPAIR_ENABLED", "true") == "true" + repairInterval := time.Hour + if ri := os.Getenv("OPENAUDIO_REPAIR_INTERVAL"); ri != "" { + if parsed, err := time.ParseDuration(ri); err == nil { + repairInterval = parsed + } else { + logger.Warn("failed to parse OPENAUDIO_REPAIR_INTERVAL, using default 1h", zap.String("value", ri), zap.Error(err)) + } + } + config := server.MediorumConfig{ Self: registrar.Peer{ Host: httputil.RemoveTrailingSlash(strings.ToLower(nodeEndpoint)), @@ -161,6 +172,8 @@ func runMediorum(lc *lifecycle.Lifecycle, logger *zap.Logger, mediorumEnv string DiscoveryListensEndpoints: discoveryListensEndpoints(), LogLevel: getenvWithDefault("OPENAUDIO_LOG_LEVEL", "info"), DeadHosts: []string{}, + RepairEnabled: repairEnabled, + RepairInterval: repairInterval, } ss, err := server.New(lc, logger, config, posChannel, core, ethService) diff --git a/pkg/mediorum/server/repair.go b/pkg/mediorum/server/repair.go index 96c2f31b..86b5322a 100644 --- a/pkg/mediorum/server/repair.go +++ b/pkg/mediorum/server/repair.go @@ -41,13 +41,21 @@ type RepairTracker struct { func (ss *MediorumServer) startRepairer(ctx context.Context) error { logger := ss.logger.With(zap.String("task", "repair")) + if !ss.Config.RepairEnabled { + logger.Info("repair is disabled via OPENAUDIO_REPAIR_ENABLED=false") + <-ctx.Done() + return ctx.Err() + } + + repairInterval := ss.Config.RepairInterval + logger.Info("repair configured", zap.Duration("interval", repairInterval)) + // wait a minute on startup to determine healthy peers ticker := time.NewTicker(1 * time.Minute) for { select { case <-ticker.C: - // Wait 1 hour for next interval unless otherwise specified - ticker.Reset(1 * time.Hour) + ticker.Reset(repairInterval) // pick up where we left off from the last repair.go run, including if the server restarted in the middle of a run tracker := RepairTracker{ diff --git a/pkg/mediorum/server/server.go b/pkg/mediorum/server/server.go index 9421d3f4..c86acbbd 100644 --- a/pkg/mediorum/server/server.go +++ b/pkg/mediorum/server/server.go @@ -75,6 +75,8 @@ type MediorumConfig struct { DiscoveryListensEndpoints []string LogLevel string DeadHosts []string + RepairEnabled bool `default:"true"` + RepairInterval time.Duration `default:"1h"` ProgrammableDistributionEnabled bool