ordering

package
v3.3.27+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2021 License: Apache-2.0 Imports: 5 Imported by: 55

Documentation

Overview

Package ordering is a clientv3 wrapper that caches response header revisions to detect ordering violations from stale responses. Users may define a policy on how to handle the ordering violation, but typically the client should connect to another endpoint and reissue the request.

The most common situation where an ordering violation happens is a client reconnects to a partitioned member and issues a serializable read. Since the partitioned member is likely behind the last member, it may return a Get response based on a store revision older than the store revision used to service a prior Get on the former endpoint.

First, create a client:

cli, err := clientv3.New(clientv3.Config{Endpoints: []string{"localhost:2379"}})
if err != nil {
	// handle error!
}

Next, override the client interface with the ordering wrapper:

vf := func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error {
	return fmt.Errorf("ordering: issued %+v, got %+v, expected rev=%v", op, resp, prevRev)
}
cli.KV = ordering.NewKV(cli.KV, vf)

Now calls using 'cli' will reject order violations with an error.

Index

Constants

This section is empty.

Variables

View Source
var ErrNoGreaterRev = errors.New("etcdclient: no cluster members have a revision higher than the previously received revision")

Functions

func NewKV

func NewKV(kv clientv3.KV, orderViolationFunc OrderViolationFunc) *kvOrdering

Types

type OrderViolationFunc

type OrderViolationFunc func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error

func NewOrderViolationSwitchEndpointClosure

func NewOrderViolationSwitchEndpointClosure(c clientv3.Client) OrderViolationFunc

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL