package zk

import "github.com/go-kit/kit/sd/zk"

Package zk provides Instancer and Registrar implementations for ZooKeeper.

Index

Constants

const (
	// DefaultConnectTimeout is the default timeout to establish a connection to
	// a ZooKeeper node.
	DefaultConnectTimeout = 2 * time.Second
	// DefaultSessionTimeout is the default timeout to keep the current
	// ZooKeeper session alive during a temporary disconnect.
	DefaultSessionTimeout = 5 * time.Second
)

Variables

var (
	DefaultACL            = zk.WorldACL(zk.PermAll)
	ErrInvalidCredentials = errors.New("invalid credentials provided")
	ErrClientClosed       = errors.New("client service closed")
	ErrNotRegistered      = errors.New("not registered")
	ErrNodeNotFound       = errors.New("node not found")
)

DefaultACL is the default ACL to use for creating znodes.

Types

type Client

type Client interface {
	// GetEntries should query the provided path in ZooKeeper, place a watch on
	// it and retrieve data from its current child nodes.
	GetEntries(path string) ([]string, <-chan zk.Event, error)
	// CreateParentNodes should try to create the path in case it does not exist
	// yet on ZooKeeper.
	CreateParentNodes(path string) error
	// Register a service with ZooKeeper.
	Register(s *Service) error
	// Deregister a service with ZooKeeper.
	Deregister(s *Service) error
	// Stop should properly shutdown the client implementation
	Stop()
}

Client is a wrapper around a lower level ZooKeeper client implementation.

func NewClient

func NewClient(servers []string, logger log.Logger, options ...Option) (Client, error)

NewClient returns a ZooKeeper client with a connection to the server cluster. It will return an error if the server cluster cannot be resolved.

type Instancer

type Instancer struct {
	// contains filtered or unexported fields
}

Instancer yield instances stored in a certain ZooKeeper path. Any kind of change in that path is watched and will update the subscribers.

func NewInstancer

func NewInstancer(c Client, path string, logger log.Logger) (*Instancer, error)

NewInstancer returns a ZooKeeper Instancer. ZooKeeper will start watching the given path for changes and update the Instancer endpoints.

func (*Instancer) Deregister

func (s *Instancer) Deregister(ch chan<- sd.Event)

Deregister implements Instancer.

func (*Instancer) Register

func (s *Instancer) Register(ch chan<- sd.Event)

Register implements Instancer.

func (*Instancer) Stop

func (s *Instancer) Stop()

Stop terminates the Instancer.

type Option

type Option func(*clientConfig) error

Option functions enable friendly APIs.

func ACL

func ACL(acl []zk.ACL) Option

ACL returns an Option specifying a non-default ACL for creating parent nodes.

func ConnectTimeout

func ConnectTimeout(t time.Duration) Option

ConnectTimeout returns an Option specifying a non-default connection timeout when we try to establish a connection to a ZooKeeper server.

func Credentials

func Credentials(user, pass string) Option

Credentials returns an Option specifying a user/password combination which the client will use to authenticate itself with.

func EventHandler

func EventHandler(handler func(zk.Event)) Option

EventHandler returns an Option specifying a callback function to handle incoming zk.Event payloads (ZooKeeper connection events).

func Payload

func Payload(payload [][]byte) Option

Payload returns an Option specifying non-default data values for each znode created by CreateParentNodes.

func SessionTimeout

func SessionTimeout(t time.Duration) Option

SessionTimeout returns an Option specifying a non-default session timeout.

type Registrar

type Registrar struct {
	// contains filtered or unexported fields
}

Registrar registers service instance liveness information to ZooKeeper.

func NewRegistrar

func NewRegistrar(client Client, service Service, logger log.Logger) *Registrar

NewRegistrar returns a ZooKeeper Registrar acting on the provided catalog registration.

func (*Registrar) Deregister

func (r *Registrar) Deregister()

Deregister implements sd.Registrar interface.

func (*Registrar) Register

func (r *Registrar) Register()

Register implements sd.Registrar interface.

type Service

type Service struct {
	Path string // discovery namespace, example: /myorganization/myplatform/
	Name string // service name, example: addscv
	Data []byte // instance data to store for discovery, example: 10.0.2.10:80
	// contains filtered or unexported fields
}

Service holds the root path, service name and instance identifying data you want to publish to ZooKeeper.

Source Files

client.go doc.go instancer.go logwrapper.go registrar.go

Version
v0.13.0 (latest)
Published
May 29, 2023
Platform
linux/amd64
Imports
9 packages
Last checked
4 hours ago

Tools for package owners.