github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/coordination_test.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package integration
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  	"os"
    10  	"testing"
    11  
    12  	"github.com/ydb-platform/ydb-go-sdk/v3"
    13  	"github.com/ydb-platform/ydb-go-sdk/v3/coordination"
    14  	"github.com/ydb-platform/ydb-go-sdk/v3/coordination/options"
    15  	"github.com/ydb-platform/ydb-go-sdk/v3/log"
    16  	"github.com/ydb-platform/ydb-go-sdk/v3/trace"
    17  )
    18  
    19  //nolint:errcheck
    20  func TestCoordinationSemaphore(t *testing.T) {
    21  	ctx := context.TODO()
    22  	db, err := ydb.Open(ctx,
    23  		os.Getenv("YDB_CONNECTION_STRING"),
    24  		ydb.WithAccessTokenCredentials(os.Getenv("YDB_ACCESS_TOKEN_CREDENTIALS")),
    25  		ydb.WithLogger(
    26  			log.Default(os.Stderr, log.WithMinLevel(log.TRACE)),
    27  			trace.MatchDetails(`ydb\.(coordination).*`),
    28  		),
    29  	)
    30  	if err != nil {
    31  		t.Fatalf("failed to connect: %v", err)
    32  	}
    33  	defer db.Close(ctx) // cleanup resources
    34  
    35  	const nodePath = "/local/coordination/node/test"
    36  
    37  	// create node
    38  	err = db.Coordination().CreateNode(ctx, nodePath, coordination.NodeConfig{
    39  		Path:                     "",
    40  		SelfCheckPeriodMillis:    1000,
    41  		SessionGracePeriodMillis: 1000,
    42  		ReadConsistencyMode:      coordination.ConsistencyModeStrict,
    43  		AttachConsistencyMode:    coordination.ConsistencyModeStrict,
    44  		RatelimiterCountersMode:  coordination.RatelimiterCountersModeDetailed,
    45  	})
    46  	if err != nil {
    47  		t.Fatalf("failed to create node: %v", err)
    48  	}
    49  	defer db.Coordination().DropNode(ctx, nodePath)
    50  	e, c, err := db.Coordination().DescribeNode(ctx, nodePath)
    51  	if err != nil {
    52  		t.Fatalf("failed to describe node: %v\n", err)
    53  	}
    54  	fmt.Printf("node description: %+v\nnode config: %+v\n", e, c)
    55  
    56  	s, err := db.Coordination().Session(ctx, nodePath)
    57  	if err != nil {
    58  		t.Fatalf("failed to create session: %v\n", err)
    59  	}
    60  	defer s.Close(ctx)
    61  	fmt.Printf("session 1 created, id: %d\n", s.SessionID())
    62  
    63  	err = s.CreateSemaphore(ctx, "my-semaphore", 20, options.WithCreateData([]byte{1, 2, 3}))
    64  	if err != nil {
    65  		t.Fatalf("failed to create semaphore: %v", err)
    66  	}
    67  	fmt.Printf("semaphore my-semaphore created\n")
    68  
    69  	lease, err := s.AcquireSemaphore(ctx, "my-semaphore", 10)
    70  	if err != nil {
    71  		t.Fatalf("failed to acquire semaphore: %v", err)
    72  	}
    73  	defer lease.Release()
    74  	fmt.Printf("session 1 acquired semaphore 10\n")
    75  
    76  	s.Reconnect()
    77  	fmt.Printf("session 1 reconnected\n")
    78  
    79  	desc, err := s.DescribeSemaphore(
    80  		ctx,
    81  		"my-semaphore",
    82  		options.WithDescribeOwners(true),
    83  		options.WithDescribeWaiters(true),
    84  	)
    85  	if err != nil {
    86  		t.Fatalf("failed to describe semaphore: %v", err)
    87  	}
    88  	fmt.Printf("session 1 described semaphore %v\n", desc)
    89  
    90  	err = lease.Release()
    91  	if err != nil {
    92  		t.Fatalf("failed to release semaphore: %v", err)
    93  	}
    94  	fmt.Printf("session 1 released semaphore my-semaphore\n")
    95  
    96  	err = s.DeleteSemaphore(ctx, "my-semaphore", options.WithForceDelete(true))
    97  	if err != nil {
    98  		t.Fatalf("failed to delete semaphore: %v", err)
    99  	}
   100  
   101  	fmt.Printf("deleted semaphore my-semaphore\n")
   102  }