ydb

package
v0.0.0-...-5a97979 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2023 License: Apache-2.0 Imports: 12 Imported by: 1

README

Usage

You can use it like this:

package main

import (
	"context"
	"flag"
	"os"
	"time"

	"github.com/preved911/resourcelock/ydb"
	ydbsdk "github.com/ydb-platform/ydb-go-sdk/v3"
	"k8s.io/client-go/tools/leaderelection"
	"k8s.io/klog"
)

func main() {
	klog.InitFlags(nil)
	database := flag.String("db", "", "ydb database name for init connection")
	leaseDuration := flag.Duration("lease-duration", 15*time.Second, "lease duration")
	renewDeadline := flag.Duration("renew-deadline", 10*time.Second, "renew deadline")
	retryPeriod := flag.Duration("retry-period", 2*time.Second, "retry period")
	flag.Parse()

	token := os.Getenv("YC_TOKEN")
	ctx := context.Background()
	db, err := ydbsdk.Open(ctx, "grpcs://ydb.serverless.yandexcloud.net:2135",
		ydbsdk.WithAccessTokenCredentials(token),
		ydbsdk.WithDatabase(*database),
	)
	if err != nil {
		klog.Fatal(err)
	}
	defer db.Close(ctx)

	identity, err := os.Hostname()
	if err != nil {
		klog.Fatal(err)
	}
	lock := ydb.New(db, "testtable", "testrecord", identity)
	lec := leaderelection.LeaderElectionConfig{
		Lock:          lock,
		LeaseDuration: *leaseDuration,
		RenewDeadline: *renewDeadline,
		RetryPeriod:   *retryPeriod,
		Callbacks: leaderelection.LeaderCallbacks{
			OnStartedLeading: func(ctx context.Context) {
				klog.Infof("%s started leading", lock.Identity())
			},
			OnStoppedLeading: func() {
				klog.Infof("%s stopped leading", lock.Identity())
			},
			OnNewLeader: func(identity string) {
				klog.Infof("leader changed")
			},
		},
		Name: "TestApp",
	}
	le, err := leaderelection.NewLeaderElector(lec)
	if err != nil {
		klog.Fatal(err)
	}

	if err := lock.CreateTable(ctx); err != nil {
		klog.Fatal(err)
	}

	le.Run(ctx)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type YDBLeaderElection

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

func New

func New(db *ydb.Driver, table, name, identity string) *YDBLeaderElection

func (*YDBLeaderElection) Create

func (*YDBLeaderElection) CreateTable

func (l *YDBLeaderElection) CreateTable(ctx context.Context) error

func (*YDBLeaderElection) Describe

func (l *YDBLeaderElection) Describe() string

func (*YDBLeaderElection) Get

func (*YDBLeaderElection) Identity

func (l *YDBLeaderElection) Identity() string

func (*YDBLeaderElection) RecordEvent

func (l *YDBLeaderElection) RecordEvent(event string)

func (*YDBLeaderElection) Update

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL