github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/coordination/example_test.go (about)

     1  package coordination_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/ydb-platform/ydb-go-sdk/v3"
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/coordination"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/coordination/options"
    10  )
    11  
    12  //nolint:errcheck
    13  func Example_createDropNode() {
    14  	ctx := context.TODO()
    15  	db, err := ydb.Open(ctx, "grpc://localhost:2136/local")
    16  	if err != nil {
    17  		fmt.Printf("failed to connect: %v", err)
    18  
    19  		return
    20  	}
    21  	defer db.Close(ctx) // cleanup resources
    22  	// create node
    23  	err = db.Coordination().CreateNode(ctx, "/local/test", coordination.NodeConfig{
    24  		Path:                     "",
    25  		SelfCheckPeriodMillis:    1000,
    26  		SessionGracePeriodMillis: 1000,
    27  		ReadConsistencyMode:      coordination.ConsistencyModeRelaxed,
    28  		AttachConsistencyMode:    coordination.ConsistencyModeRelaxed,
    29  		RatelimiterCountersMode:  coordination.RatelimiterCountersModeDetailed,
    30  	})
    31  	if err != nil {
    32  		fmt.Printf("failed to create node: %v", err)
    33  
    34  		return
    35  	}
    36  	defer db.Coordination().DropNode(ctx, "/local/test")
    37  	e, c, err := db.Coordination().DescribeNode(ctx, "/local/test")
    38  	if err != nil {
    39  		fmt.Printf("failed to describe node: %v", err)
    40  
    41  		return
    42  	}
    43  	fmt.Printf("node description: %+v\nnode config: %+v\n", e, c)
    44  }
    45  
    46  func Example_semaphore() {
    47  	ctx := context.TODO()
    48  	db, err := ydb.Open(ctx, "grpc://localhost:2136/local")
    49  	if err != nil {
    50  		fmt.Printf("failed to connect: %v", err)
    51  
    52  		return
    53  	}
    54  	defer db.Close(ctx) // cleanup resources
    55  	// create node
    56  	err = db.Coordination().CreateNode(ctx, "/local/test", coordination.NodeConfig{
    57  		Path:                     "",
    58  		SelfCheckPeriodMillis:    1000,
    59  		SessionGracePeriodMillis: 1000,
    60  		ReadConsistencyMode:      coordination.ConsistencyModeStrict,
    61  		AttachConsistencyMode:    coordination.ConsistencyModeStrict,
    62  		RatelimiterCountersMode:  coordination.RatelimiterCountersModeDetailed,
    63  	})
    64  	if err != nil {
    65  		fmt.Printf("failed to create node: %v", err)
    66  
    67  		return
    68  	}
    69  	defer func() {
    70  		dropNodeErr := db.Coordination().DropNode(ctx, "/local/test")
    71  		if dropNodeErr != nil {
    72  			fmt.Printf("failed to drop node: %v\n", dropNodeErr)
    73  		}
    74  	}()
    75  
    76  	e, c, err := db.Coordination().DescribeNode(ctx, "/local/test")
    77  	if err != nil {
    78  		fmt.Printf("failed to describe node: %v\n", err)
    79  
    80  		return
    81  	}
    82  	fmt.Printf("node description: %+v\nnode config: %+v\n", e, c)
    83  
    84  	s, err := db.Coordination().Session(ctx, "/local/test")
    85  	if err != nil {
    86  		fmt.Printf("failed to create session: %v\n", err)
    87  
    88  		return
    89  	}
    90  	defer s.Close(ctx)
    91  	fmt.Printf("session 1 created, id: %d\n", s.SessionID())
    92  
    93  	err = s.CreateSemaphore(ctx, "my-semaphore", 20, options.WithCreateData([]byte{1, 2, 3}))
    94  	if err != nil {
    95  		fmt.Printf("failed to create semaphore: %v", err)
    96  
    97  		return
    98  	}
    99  	fmt.Printf("semaphore my-semaphore created\n")
   100  
   101  	lease, err := s.AcquireSemaphore(ctx, "my-semaphore", 10)
   102  	if err != nil {
   103  		fmt.Printf("failed to acquire semaphore: %v", err)
   104  
   105  		return
   106  	}
   107  	defer func() {
   108  		releaseErr := lease.Release()
   109  		if releaseErr != nil {
   110  			fmt.Printf("failed to release lease: %v", releaseErr)
   111  		}
   112  	}()
   113  
   114  	fmt.Printf("session 1 acquired semaphore 10\n")
   115  
   116  	s.Reconnect()
   117  	fmt.Printf("session 1 reconnected\n")
   118  
   119  	desc, err := s.DescribeSemaphore(
   120  		ctx,
   121  		"my-semaphore",
   122  		options.WithDescribeOwners(true),
   123  		options.WithDescribeWaiters(true),
   124  	)
   125  	if err != nil {
   126  		fmt.Printf("failed to describe semaphore: %v", err)
   127  
   128  		return
   129  	}
   130  	fmt.Printf("session 1 described semaphore %v\n", desc)
   131  
   132  	err = lease.Release()
   133  	if err != nil {
   134  		fmt.Printf("failed to release semaphore: %v", err)
   135  
   136  		return
   137  	}
   138  	fmt.Printf("session 1 released semaphore my-semaphore\n")
   139  
   140  	err = s.DeleteSemaphore(ctx, "my-semaphore", options.WithForceDelete(true))
   141  	if err != nil {
   142  		fmt.Printf("failed to delete semaphore: %v", err)
   143  
   144  		return
   145  	}
   146  	fmt.Printf("deleted semaphore my-semaphore\n")
   147  }