package ratelimiter

import "github.com/ydb-platform/ydb-go-sdk/v3/ratelimiter"

Example

Code:

{
	ctx := context.TODO()
	db, err := ydb.Open(ctx, "grpcs://localhost:2135/local")
	if err != nil {
		fmt.Printf("failed to connect: %v", err)
		return
	}
	defer db.Close(ctx) // cleanup resources
	// create node
	err = db.Coordination().CreateNode(ctx, "/local/ratelimiter_test", coordination.NodeConfig{
		Path:                     "",
		SelfCheckPeriodMillis:    1000,
		SessionGracePeriodMillis: 1000,
		ReadConsistencyMode:      coordination.ConsistencyModeRelaxed,
		AttachConsistencyMode:    coordination.ConsistencyModeRelaxed,
		RatelimiterCountersMode:  coordination.RatelimiterCountersModeDetailed,
	})
	if err != nil {
		fmt.Printf("failed to create node: %v", err)
		return
	}
	defer func() {
		// cleanup node
		err = db.Coordination().DropNode(ctx, "/local/ratelimiter_test")
		if err != nil {
			fmt.Printf("failed to drop node: %v", err)
		}
	}()
	// create resource
	err = db.Ratelimiter().CreateResource(ctx, "/local/ratelimiter_test", ratelimiter.Resource{
		ResourcePath: "test_resource",
		HierarchicalDrr: ratelimiter.HierarchicalDrrSettings{
			MaxUnitsPerSecond:       1,
			MaxBurstSizeCoefficient: 2,
		},
	})
	if err != nil {
		fmt.Printf("failed to create resource: %v", err)
	}
	defer func() {
		// cleanup resource
		err = db.Ratelimiter().DropResource(ctx, "/local/ratelimiter_test", "test_resource")
		if err != nil {
			fmt.Printf("failed to drop resource: %v", err)
		}
	}()
	// alter resource
	err = db.Ratelimiter().AlterResource(ctx, "/local/ratelimiter_test", ratelimiter.Resource{
		ResourcePath: "test_resource",
		HierarchicalDrr: ratelimiter.HierarchicalDrrSettings{
			MaxUnitsPerSecond:       3,
			MaxBurstSizeCoefficient: 4,
		},
	})
	if err != nil {
		fmt.Printf("failed to alter resource: %v", err)
	}
	// acquire resource amount 1
	err = db.Ratelimiter().AcquireResource(
		ctx,
		"/local/ratelimiter_test",
		"test_resource",
		1,
		ratelimiter.WithAcquire(),
	)
	if err != nil {
		fmt.Printf("failed to acquire resource: %v", err)
	}
}

Index

Examples

Functions

func WithAcquire

func WithAcquire() options.AcquireOption

func WithOperationCancelAfter

func WithOperationCancelAfter(operationCancelAfter time.Duration) options.AcquireOption

func WithOperationTimeout

func WithOperationTimeout(operationTimeout time.Duration) options.AcquireOption

func WithReport

func WithReport() options.AcquireOption

Types

type AcquireError

type AcquireError interface {
	error

	Amount() uint64
	Unwrap() error
}

type Client

type Client interface {
	closer.Closer

	CreateResource(
		ctx context.Context,
		coordinationNodePath string,
		resource Resource,
	) (err error)
	AlterResource(
		ctx context.Context,
		coordinationNodePath string,
		resource Resource,
	) (err error)
	DropResource(
		ctx context.Context,
		coordinationNodePath string,
		resourcePath string,
	) (err error)
	ListResource(
		ctx context.Context,
		coordinationNodePath string,
		resourcePath string,
		recursive bool,
	) (_ []string, err error)
	DescribeResource(
		ctx context.Context,
		coordinationNodePath string,
		resourcePath string,
	) (_ *Resource, err error)
	AcquireResource(
		ctx context.Context,
		coordinationNodePath string,
		resourcePath string,
		amount uint64,
		opts ...options.AcquireOption,
	) (err error)
}

type HierarchicalDrrSettings

type HierarchicalDrrSettings struct {
	MaxUnitsPerSecond       float64
	MaxBurstSizeCoefficient float64
	PrefetchCoefficient     float64
	PrefetchWatermark       float64
}

type Resource

type Resource struct {
	ResourcePath    string
	HierarchicalDrr HierarchicalDrrSettings
}

Source Files

errors.go ratelimiter.go resource.go

Version
v3.36.0
Published
Aug 24, 2022
Platform
darwin/amd64
Imports
4 packages
Last checked
13 seconds ago

Tools for package owners.