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  }