etcd: go.etcd.io/etcd/clientv3/leasing Index | Files

package leasing

import "go.etcd.io/etcd/clientv3/leasing"

Package leasing serves linearizable reads from a local cache by acquiring exclusive write access to keys through a client-side leasing protocol. This leasing layer can either directly wrap the etcd client or it can be exposed through the etcd grpc proxy server, granting multiple clients write access.

First, create a leasing KV from a clientv3.Client 'cli':

lkv, err := leasing.NewKV(cli, "leasing-prefix")
if err != nil {
    // handle error
}

A range request for a key "abc" tries to acquire a leasing key so it can cache the range's key locally. On the server, the leasing key is stored to "leasing-prefix/abc":

resp, err := lkv.Get(context.TODO(), "abc")

Future linearized read requests using 'lkv' will be served locally for the lease's lifetime:

resp, err = lkv.Get(context.TODO(), "abc")

If another leasing client writes to a leased key, then the owner relinquishes its exclusive access, permitting the writer to modify the key:

lkv2, err := leasing.NewKV(cli, "leasing-prefix")
if err != nil {
    // handle error
}
lkv2.Put(context.TODO(), "abc", "456")
resp, err = lkv.Get("abc")

Index

Package Files

cache.go doc.go kv.go txn.go util.go

func NewKV Uses

func NewKV(cl *v3.Client, pfx string, opts ...concurrency.SessionOption) (v3.KV, func(), error)

NewKV wraps a KV instance so that all requests are wired through a leasing protocol.

Package leasing imports 12 packages (graph) and is imported by 8 packages. Updated 2018-08-29. Refresh now. Tools for package owners.