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  }