Documentation ¶
Index ¶
- Constants
- Variables
- func ChildrenRecursive(zconn Conn, zkPath string) ([]string, error)
- func CreateOrUpdate(zconn Conn, zkPath string, value []byte, flags int, aclv []zookeeper.ACL, ...) (pathCreated string, err error)
- func CreateRecursive(zconn Conn, zkPath string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error)
- func DeleteRecursive(zconn Conn, zkPath string, version int32) error
- func GuessLocalCell() string
- func IsDirectory(aclv []zookeeper.ACL) bool
- func ObtainQueueLock(zconn Conn, zkPath string, wait time.Duration, interrupted <-chan struct{}) error
- func ResolveWildcards(zconn Conn, zkPaths []string) ([]string, error)
- func Time(i int64) time.Time
- func ZkCellFromZkPath(zkPath string) (string, error)
- func ZkKnownCells() ([]string, error)
- func ZkPathToZkAddr(zkPath string) (string, error)
- func ZkTime(t time.Time) int64
- type Conn
- type ConnCache
- type ElectorTask
- type MetaConn
- func (conn *MetaConn) ACL(path string) (acl []zookeeper.ACL, stat *zookeeper.Stat, err error)
- func (conn *MetaConn) Children(path string) (children []string, stat *zookeeper.Stat, err error)
- func (conn *MetaConn) ChildrenW(path string) (children []string, stat *zookeeper.Stat, watch <-chan zookeeper.Event, ...)
- func (conn *MetaConn) Close() error
- func (conn *MetaConn) Create(path string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error)
- func (conn *MetaConn) Delete(path string, version int32) (err error)
- func (conn *MetaConn) Exists(path string) (stat *zookeeper.Stat, err error)
- func (conn *MetaConn) ExistsW(path string) (stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error)
- func (conn *MetaConn) Get(path string) (data []byte, stat *zookeeper.Stat, err error)
- func (conn *MetaConn) GetW(path string) (data []byte, stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error)
- func (conn *MetaConn) Set(path string, value []byte, version int32) (stat *zookeeper.Stat, err error)
- func (conn *MetaConn) SetACL(path string, aclv []zookeeper.ACL, version int32) (err error)
- type ZElector
- type ZLocker
- type ZkConn
- func (conn *ZkConn) ACL(path string) ([]zookeeper.ACL, *zookeeper.Stat, error)
- func (conn *ZkConn) Children(path string) ([]string, *zookeeper.Stat, error)
- func (conn *ZkConn) ChildrenW(path string) ([]string, *zookeeper.Stat, <-chan zookeeper.Event, error)
- func (conn *ZkConn) Close() error
- func (conn *ZkConn) Create(path string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error)
- func (conn *ZkConn) Delete(path string, version int32) (err error)
- func (conn *ZkConn) Exists(path string) (*zookeeper.Stat, error)
- func (conn *ZkConn) ExistsW(path string) (*zookeeper.Stat, <-chan zookeeper.Event, error)
- func (conn *ZkConn) Get(path string) ([]byte, *zookeeper.Stat, error)
- func (conn *ZkConn) GetW(path string) ([]byte, *zookeeper.Stat, <-chan zookeeper.Event, error)
- func (conn *ZkConn) Set(path string, value []byte, version int32) (*zookeeper.Stat, error)
- func (conn *ZkConn) SetACL(path string, aclv []zookeeper.ACL, version int32) error
Constants ¶
const ( // PermDirectory are default permissions for a node. PermDirectory = zookeeper.PermAdmin | zookeeper.PermCreate | zookeeper.PermDelete | zookeeper.PermRead | zookeeper.PermWrite // PermFile allows a zk node to emulate file behavior by disallowing child nodes. PermFile = zookeeper.PermAdmin | zookeeper.PermRead | zookeeper.PermWrite )
Variables ¶
var ( // DefaultZkConfigPaths is the default list of config files to check. DefaultZkConfigPaths = []string{"/etc/zookeeper/zk_client.json"} // MagicPrefix is the Default name for the root note in the zookeeper tree. MagicPrefix = "zk" )
var ( // ErrInterrupted is returned by functions that wait for a result // when they are interrupted. ErrInterrupted = errors.New("zkutil: obtaining lock was interrupted") // ErrTimeout is returned by functions that wait for a result // when the timeout value is reached. ErrTimeout = errors.New("zkutil: obtaining lock timed out") )
var ErrConnectionClosed = errors.New("ZkConn: connection is closed")
ErrConnectionClosed is returned if we try to access a closed connection.
Functions ¶
func ChildrenRecursive ¶
ChildrenRecursive returns the relative path of all the children of the provided node.
func CreateOrUpdate ¶
func CreateOrUpdate(zconn Conn, zkPath string, value []byte, flags int, aclv []zookeeper.ACL, recursive bool) (pathCreated string, err error)
CreateOrUpdate creates or updates a file.
func CreateRecursive ¶
func CreateRecursive(zconn Conn, zkPath string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error)
CreateRecursive creates a path and any pieces required, think mkdir -p. Intermediate znodes are always created empty.
func DeleteRecursive ¶
DeleteRecursive will delete all children of the given path.
func GuessLocalCell ¶
func GuessLocalCell() string
GuessLocalCell reads the cell from -zk.local-cell, or the environment ZK_CLIENT_LOCAL_CELL or guess the cell by the hostname. The letter-only prefix of the string is used as the cell name. For instance:
pa1 -> pa sjl-1 -> sjl lwc1 -> lwc
func IsDirectory ¶
IsDirectory returns if this node should be treated as a directory.
func ObtainQueueLock ¶
func ObtainQueueLock(zconn Conn, zkPath string, wait time.Duration, interrupted <-chan struct{}) error
ObtainQueueLock waits until we hold the lock in the provided path. The lexically lowest node is the lock holder - verify that this path holds the lock. Call this queue-lock because the semantics are a hybrid. Normal zookeeper locks make assumptions about sequential numbering that don't hold when the data in a lock is modified. if the provided 'interrupted' chan is closed, we'll just stop waiting and return an interruption error
func ResolveWildcards ¶
ResolveWildcards resolves paths like: /zk/nyc/vt/tablets/*/action /zk/global/vt/keyspaces/*/shards/*/action /zk/*/vt/tablets/*/action into real existing paths
If you send paths that don't contain any wildcard and don't exist, this function will return an empty array.
func ZkCellFromZkPath ¶
ZkCellFromZkPath extracts the cell name from a zkPath.
func ZkKnownCells ¶
ZkKnownCells returns all the known cells, alphabetically ordered. It will include 'global' if there is a dc-specific global cell or a global cell.
func ZkPathToZkAddr ¶
ZkPathToZkAddr returns the zookeeper server address to use for the given path.
Types ¶
type Conn ¶
type Conn interface { Get(path string) (data []byte, stat *zookeeper.Stat, err error) GetW(path string) (data []byte, stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error) Children(path string) (children []string, stat *zookeeper.Stat, err error) ChildrenW(path string) (children []string, stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error) Exists(path string) (stat *zookeeper.Stat, err error) ExistsW(path string) (stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error) Create(path string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error) Set(path string, value []byte, version int32) (stat *zookeeper.Stat, err error) Delete(path string, version int32) (err error) Close() error ACL(path string) ([]zookeeper.ACL, *zookeeper.Stat, error) SetACL(path string, aclv []zookeeper.ACL, version int32) error }
Conn is really close to the zookeeper library connection interface. So refer to the zookeeper docs for the conventions used here (for instance, using -1 as version to specify any version)
type ConnCache ¶
type ConnCache struct {
// contains filtered or unexported fields
}
ConnCache is a cache for Zookeeper connections which guarantees that you have at most one zookeeper connection per cell.
func NewConnCache ¶
func NewConnCache() *ConnCache
NewConnCache creates a new Zookeeper connection cache.
type ElectorTask ¶
type ElectorTask interface { Run() error Stop() // Return true if interrupted, false if it died of natural causes. // An interrupted task indicates that the election should stop. Interrupted() bool }
ElectorTask is the interface for a task that runs essentially forever or until something bad happens. If a task must be stopped, it should be handled promptly - no second notification will be sent.
type MetaConn ¶
type MetaConn struct {
// contains filtered or unexported fields
}
MetaConn is an implementation of Conn that routes to multiple cells. It uses the <cell> in /zk/<cell>/... paths to decide which ZK cluster to send a given request to.
func (*MetaConn) ChildrenW ¶
func (conn *MetaConn) ChildrenW(path string) (children []string, stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error)
ChildrenW implements Conn.
func (*MetaConn) Create ¶
func (conn *MetaConn) Create(path string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error)
Create implements Conn.
func (*MetaConn) ExistsW ¶
func (conn *MetaConn) ExistsW(path string) (stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error)
ExistsW implements Conn.
func (*MetaConn) GetW ¶
func (conn *MetaConn) GetW(path string) (data []byte, stat *zookeeper.Stat, watch <-chan zookeeper.Event, err error)
GetW implements Conn.
type ZElector ¶
type ZElector struct {
// contains filtered or unexported fields
}
ZElector stores basic state for running an election.
func CreateElection ¶
CreateElection returns an initialized elector. An election is really a cycle of events. You are flip-flopping between leader and candidate. It's better to think of this as a stream of events that one needs to react to.
func (ZElector) LockWithTimeout ¶
LockWithTimeout returns nil when the lock is acquired. A lock is held if the file exists and you are the creator. Setting the wait to zero makes this a nonblocking lock check.
FIXME(msolo) Disallow non-super users from removing the lock?
func (*ZElector) RunTask ¶
func (ze *ZElector) RunTask(task ElectorTask) error
RunTask returns nil when the underlyingtask ends or the error it generated.
type ZLocker ¶
type ZLocker interface { Lock() error LockWithTimeout(wait time.Duration) error Unlock() error Interrupt() }
ZLocker is an interface for a lock that can fail.
func CreateMutex ¶
CreateMutex initializes an unacquired mutex. A mutex is released only by Unlock. You can clean up a mutex with delete, but you should be careful doing so.
type ZkConn ¶
type ZkConn struct {
// contains filtered or unexported fields
}
ZkConn is a client class that implements zk.Conn using a zookeeper.Conn. The conn member variable is protected by the mutex.
func DialZk ¶
DialZk dials a ZK server and waits for connection event. Returns a ZkConn encapsulating the zookeeper.Conn, and the zookeeper session event channel to monitor the connection
The value for baseTimeout is used as a session timeout as well, and will be used to negotiate a 'good' value with the server. From reading the zookeeper source code, it has to be between 6 and 60 seconds (2x and 20x the tickTime by default, with default tick time being 3 seconds). min session time, max session time and ticktime can all be overwritten on the zookeeper server side, so these numbers may vary.
Then this baseTimeout is used to compute other related timeouts: - connect timeout is 1/3 of baseTimeout - recv timeout is 2/3 of baseTimeout minus a ping time - send timeout is 1/3 of baseTimeout - we try to send a ping a least every baseTimeout / 3
Note the baseTimeout has *nothing* to do with the time between we call Dial and the maximum time before we receive the event on the session. The library will actually try to re-connect in the background (after each timeout), and may *never* send an event if the TCP connections always fail. Use DialZkTimeout to enforce a timeout for the initial connect.
func DialZkTimeout ¶
func DialZkTimeout(zkAddr string, baseTimeout time.Duration, connectTimeout time.Duration) (*ZkConn, <-chan zookeeper.Event, error)
DialZkTimeout dial the server, and wait up to timeout until connection
func (*ZkConn) ChildrenW ¶
func (conn *ZkConn) ChildrenW(path string) ([]string, *zookeeper.Stat, <-chan zookeeper.Event, error)
ChildrenW is part of the ZkConn interface.
func (*ZkConn) Close ¶
Close will close the connection asynchronously. It will never fail, even though closing the connection might fail in the background. Accessing this ZkConn after Close has been called will return ErrConnectionClosed.
func (*ZkConn) Create ¶
func (conn *ZkConn) Create(path string, value []byte, flags int, aclv []zookeeper.ACL) (pathCreated string, err error)
Create is part of the ZkConn interface.