go.etcd.io/etcd@v3.3.27+incompatible/clientv3/example_lease_test.go (about) 1 // Copyright 2016 The etcd Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package clientv3_test 16 17 import ( 18 "context" 19 "fmt" 20 "log" 21 22 "github.com/coreos/etcd/clientv3" 23 ) 24 25 func ExampleLease_grant() { 26 cli, err := clientv3.New(clientv3.Config{ 27 Endpoints: endpoints, 28 DialTimeout: dialTimeout, 29 }) 30 if err != nil { 31 log.Fatal(err) 32 } 33 defer cli.Close() 34 35 // minimum lease TTL is 5-second 36 resp, err := cli.Grant(context.TODO(), 5) 37 if err != nil { 38 log.Fatal(err) 39 } 40 41 // after 5 seconds, the key 'foo' will be removed 42 _, err = cli.Put(context.TODO(), "foo", "bar", clientv3.WithLease(resp.ID)) 43 if err != nil { 44 log.Fatal(err) 45 } 46 } 47 48 func ExampleLease_revoke() { 49 cli, err := clientv3.New(clientv3.Config{ 50 Endpoints: endpoints, 51 DialTimeout: dialTimeout, 52 }) 53 if err != nil { 54 log.Fatal(err) 55 } 56 defer cli.Close() 57 58 resp, err := cli.Grant(context.TODO(), 5) 59 if err != nil { 60 log.Fatal(err) 61 } 62 63 _, err = cli.Put(context.TODO(), "foo", "bar", clientv3.WithLease(resp.ID)) 64 if err != nil { 65 log.Fatal(err) 66 } 67 68 // revoking lease expires the key attached to its lease ID 69 _, err = cli.Revoke(context.TODO(), resp.ID) 70 if err != nil { 71 log.Fatal(err) 72 } 73 74 gresp, err := cli.Get(context.TODO(), "foo") 75 if err != nil { 76 log.Fatal(err) 77 } 78 fmt.Println("number of keys:", len(gresp.Kvs)) 79 // Output: number of keys: 0 80 } 81 82 func ExampleLease_keepAlive() { 83 cli, err := clientv3.New(clientv3.Config{ 84 Endpoints: endpoints, 85 DialTimeout: dialTimeout, 86 }) 87 if err != nil { 88 log.Fatal(err) 89 } 90 defer cli.Close() 91 92 resp, err := cli.Grant(context.TODO(), 5) 93 if err != nil { 94 log.Fatal(err) 95 } 96 97 _, err = cli.Put(context.TODO(), "foo", "bar", clientv3.WithLease(resp.ID)) 98 if err != nil { 99 log.Fatal(err) 100 } 101 102 // the key 'foo' will be kept forever 103 ch, kaerr := cli.KeepAlive(context.TODO(), resp.ID) 104 if kaerr != nil { 105 log.Fatal(kaerr) 106 } 107 108 ka := <-ch 109 fmt.Println("ttl:", ka.TTL) 110 // Output: ttl: 5 111 } 112 113 func ExampleLease_keepAliveOnce() { 114 cli, err := clientv3.New(clientv3.Config{ 115 Endpoints: endpoints, 116 DialTimeout: dialTimeout, 117 }) 118 if err != nil { 119 log.Fatal(err) 120 } 121 defer cli.Close() 122 123 resp, err := cli.Grant(context.TODO(), 5) 124 if err != nil { 125 log.Fatal(err) 126 } 127 128 _, err = cli.Put(context.TODO(), "foo", "bar", clientv3.WithLease(resp.ID)) 129 if err != nil { 130 log.Fatal(err) 131 } 132 133 // to renew the lease only once 134 ka, kaerr := cli.KeepAliveOnce(context.TODO(), resp.ID) 135 if kaerr != nil { 136 log.Fatal(kaerr) 137 } 138 139 fmt.Println("ttl:", ka.TTL) 140 // Output: ttl: 5 141 }