...

Package remotesampling

import "framework/remotesampling"
Overview
Index

Overview ▾

func CalcRequiredNodesCount

func CalcRequiredNodesCount(
    request *RemoteNodesSamplerRequest,
    storeReader collections.ConcurrentObjectStoreReader[*core.Node],
) int

Calculates the number of nodes that a sample for the specified request needs to contain.

type DefaultRemoteSamplerClient

Default implementation of RemoteSamplerClient.

type DefaultRemoteSamplerClient struct {
    // contains filtered or unexported fields
}

func NewDefaultRemoteSamplerClient

func NewDefaultRemoteSamplerClient(
    clusterName string,
    baseURI string,
    samplingStrategyName string,
    logger *logr.Logger,
) *DefaultRemoteSamplerClient

func (*DefaultRemoteSamplerClient) BaseURI

func (sc *DefaultRemoteSamplerClient) BaseURI() string

func (*DefaultRemoteSamplerClient) ClusterName

func (sc *DefaultRemoteSamplerClient) ClusterName() string

func (*DefaultRemoteSamplerClient) SampleNodes

func (sc *DefaultRemoteSamplerClient) SampleNodes(ctx context.Context, request *RemoteNodesSamplerRequest) (*RemoteNodesSamplerResponse, *RemoteNodesSamplerError)

func (*DefaultRemoteSamplerClient) SamplingStrategyName

func (sc *DefaultRemoteSamplerClient) SamplingStrategyName() string

type DefaultRemoteSamplerClientsManager

Default implementation of RemoteSamplerClientsManager.

type DefaultRemoteSamplerClientsManager struct {
    // contains filtered or unexported fields
}

func NewDefaultRemoteSamplerClientsManager

func NewDefaultRemoteSamplerClientsManager(
    remoteClusters map[string]*config.RemoteClusterConfig,
    samplingStrategy string,
    maxConcurrentRequests int,
    logger *logr.Logger,
) *DefaultRemoteSamplerClientsManager

func (*DefaultRemoteSamplerClientsManager) SampleNodesFromClusters

func (scm *DefaultRemoteSamplerClientsManager) SampleNodesFromClusters(
    ctx context.Context,
    request *RemoteNodesSamplerRequest,
    percentageOfClustersToSample float64,
) (map[string]*RemoteNodesSamplerResult, error)

type RemoteNodesSamplerError

DTO for error responses.

type RemoteNodesSamplerError struct {
    Error *client.PolarisErrorDto `json:"error" yaml:"error"`
}

type RemoteNodesSamplerRequest

DTO for requesting a nodes sample from a remote nodes sampler.

type RemoteNodesSamplerRequest struct {

    // Information about the pod that should be scheduled.
    PodInfo *pipeline.PodInfo `json:"podInfo" yaml:"podInfo"`

    // The number of nodes to sample defined as basis points (bp) of the total number of nodes.
    // 1 bp = 0.01%
    NodesToSampleBp uint32 `json:"nodesToSampleBp" yaml:"nodesToSampleBp"`
}

type RemoteNodesSamplerResponse

DTO for the response from a remote nodes sampler.

type RemoteNodesSamplerResponse struct {

    // The nodes that have been sampled.
    Nodes []*pipeline.NodeInfo `json:"nodes" yaml:"nodes"`
}

type RemoteNodesSamplerResult

Combines a RemoteNodesSamplerResponse and a RemoteNodesSamplerError in one object. At all times, only one of its fields is set.

type RemoteNodesSamplerResult struct {
    // The response from the remote nodes sampler, if the request was successful.
    Response *RemoteNodesSamplerResponse

    // The error, if the request failed.
    Error *RemoteNodesSamplerError
}

type RemoteSamplerClient

A client for obtaining node samples from a remote sampler.

This is intentionally not part of the ClusterClient interface, because ClusterClient architecturally resides at a lower level.

type RemoteSamplerClient interface {

    // The name of the cluster, where the remote sampler is running.
    ClusterName() string

    // The base URI of the remote sampler.
    BaseURI() string

    // The name of the sampling strategy.
    SamplingStrategyName() string

    // Executes a request to the remote sampler to obtain a sample of nodes.
    //
    // Returns a sample of nodes or an error.
    SampleNodes(ctx context.Context, request *RemoteNodesSamplerRequest) (*RemoteNodesSamplerResponse, *RemoteNodesSamplerError)
}

type RemoteSamplerClientsManager

Facilitates the use of multiple RemoteSamplerClients.

type RemoteSamplerClientsManager interface {

    // Executes a request to the specified percentage of all configured remote samplers to obtain node samples.
    //
    // The percentageOfClustersToSample needs to be specified as a percentage in the range (0.0, 1.0].
    //
    // Returns a map of responses indexed by cluster name or an error.
    // Note that an error is only returned in case of a fatal issue - if single clusters return an error, they will be contained in the results map.
    SampleNodesFromClusters(ctx context.Context, request *RemoteNodesSamplerRequest, percentageOfClustersToSample float64) (map[string]*RemoteNodesSamplerResult, error)
}