github.com/grafana/pyroscope@v1.18.0/pkg/distributor/distributor_ring.go (about) 1 package distributor 2 3 import ( 4 "net" 5 "strconv" 6 7 "github.com/go-kit/log" 8 "github.com/grafana/dskit/ring" 9 10 "github.com/grafana/pyroscope/pkg/util" 11 ) 12 13 const ( 14 // ringNumTokens is how many tokens each distributor should have in the ring. 15 // Distributors use a ring because they need to know how many distributors there 16 // are in total for rate limiting. 17 ringNumTokens = 1 18 ) 19 20 func toBasicLifecyclerConfig(cfg util.CommonRingConfig, logger log.Logger) (ring.BasicLifecyclerConfig, error) { 21 instanceAddr, err := ring.GetInstanceAddr(cfg.InstanceAddr, cfg.InstanceInterfaceNames, logger, cfg.EnableIPv6) 22 if err != nil { 23 return ring.BasicLifecyclerConfig{}, err 24 } 25 26 instancePort := ring.GetInstancePort(cfg.InstancePort, cfg.ListenPort) 27 28 return ring.BasicLifecyclerConfig{ 29 ID: cfg.InstanceID, 30 Addr: net.JoinHostPort(instanceAddr, strconv.Itoa(instancePort)), 31 HeartbeatPeriod: cfg.HeartbeatPeriod, 32 HeartbeatTimeout: cfg.HeartbeatTimeout, 33 TokensObservePeriod: 0, 34 NumTokens: ringNumTokens, 35 KeepInstanceInTheRingOnShutdown: false, 36 }, nil 37 }