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 }