# The Zookeeper class

(PECL zookeeper >= 0.1.0)

## Introduction

Represents ZooKeeper session.

## Class synopsis

Zookeeper {
/* Methods */
public __construct ([ string `$host` = '' [, callable `$watcher_cb` = `NULL` [, int `$recv_timeout` = 10000 ]]] )
public addAuth ( string `$scheme` , string `$cert` [, callable `$completion_cb` = `NULL` ] ) : bool
public close ( void ) : void
public connect ( string `$host` [, callable `$watcher_cb` = `NULL` [, int `$recv_timeout` = 10000 ]] ) : void
public create ( string `$path` , string `$value` , array `$acls` [, int `$flags` = `NULL` ] ) : string
public delete ( string `$path` [, int `$version` = -1 ] ) : bool
public exists ( string `$path` [, callable `$watcher_cb` = `NULL` ] ) : array
public get ( string `$path` [, callable `$watcher_cb` = `NULL` [, array `&$stat` = `NULL` [, int `$max_size` = 0 ]]] ) : string
public getAcl ( string `$path` ) : array
public getChildren ( string `$path` [, callable `$watcher_cb` = `NULL` ] ) : array
public getClientId ( void ) : int
public getConfig ( void ) : ZookeeperConfig
public getRecvTimeout ( void ) : int
public getState ( void ) : int
public isRecoverable ( void ) : bool
public set ( string `$path` , string `$value` [, int `$version` = -1 [, array `&$stat` = `NULL` ]] ) : bool
public setAcl ( string `$path` , int `$version` , array `$acl` ) : bool
public static setDebugLevel ( int `$logLevel` ) : bool
public static setDeterministicConnOrder ( bool `$yesOrNo` ) : bool
public setLogStream ( resource `$stream` ) : bool
public setWatcher ( callable `$watcher_cb` ) : bool
/* Constants */
const integer PERM_READ = 1 ;
const integer PERM_WRITE = 2 ;
const integer PERM_CREATE = 4 ;
const integer PERM_DELETE = 8 ;
const integer PERM_ADMIN = 16 ;
const integer PERM_ALL = 31 ;
const integer EPHEMERAL = 1 ;
const integer SEQUENCE = 2 ;
const integer LOG_LEVEL_ERROR = 1 ;
const integer LOG_LEVEL_WARN = 2 ;
const integer LOG_LEVEL_INFO = 3 ;
const integer LOG_LEVEL_DEBUG = 4 ;
const integer EXPIRED_SESSION_STATE = -112 ;
const integer AUTH_FAILED_STATE = -113 ;
const integer CONNECTING_STATE = 1 ;
const integer ASSOCIATING_STATE = 2 ;
const integer CONNECTED_STATE = 3 ;
const integer READONLY_STATE = 5 ;
const integer NOTCONNECTED_STATE = 999 ;
const integer CREATED_EVENT = 1 ;
const integer DELETED_EVENT = 2 ;
const integer CHANGED_EVENT = 3 ;
const integer CHILD_EVENT = 4 ;
const integer SESSION_EVENT = -1 ;
const integer NOTWATCHING_EVENT = -2 ;
const integer SYSTEMERROR = -1 ;
const integer RUNTIMEINCONSISTENCY = -2 ;
const integer DATAINCONSISTENCY = -3 ;
const integer CONNECTIONLOSS = -4 ;
const integer MARSHALLINGERROR = -5 ;
const integer UNIMPLEMENTED = -6 ;
const integer OPERATIONTIMEOUT = -7 ;
const integer BADARGUMENTS = -8 ;
const integer INVALIDSTATE = -9 ;
const integer NEWCONFIGNOQUORUM = -13 ;
const integer RECONFIGINPROGRESS = -14 ;
const integer OK = 0 ;
const integer APIERROR = -100 ;
const integer NONODE = -101 ;
const integer NOAUTH = -102 ;
const integer BADVERSION = -103 ;
const integer NOCHILDRENFOREPHEMERALS = -108 ;
const integer NODEEXISTS = -110 ;
const integer NOTEMPTY = -111 ;
const integer SESSIONEXPIRED = -112 ;
const integer INVALIDCALLBACK = -113 ;
const integer INVALIDACL = -114 ;
const integer AUTHFAILED = -115 ;
const integer CLOSING = -116 ;
const integer NOTHING = -117 ;
const integer SESSIONMOVED = -118 ;
const integer NOTREADONLY = -119 ;
const integer EPHEMERALONLOCALSESSION = -120 ;
const integer NOWATCHER = -121 ;
const integer RECONFIGDISABLED = -122 ;
}

## Predefined Constants

## ZooKeeper Permissions

`Zookeeper::PERM_READ`

  Can read nodes value and list its children

`Zookeeper::PERM_WRITE`

  Can set the nodes value

`Zookeeper::PERM_CREATE`

  Can create children

`Zookeeper::PERM_DELETE`

  Can delete children

`Zookeeper::PERM_ADMIN`

  Can execute set_acl()

`Zookeeper::PERM_ALL`

  All of the above flags ORd together

## ZooKeeper Create Flags

`Zookeeper::EPHEMERAL`

  If Zookeeper::EPHEMERAL flag is set, the node will automatically get removed if the client session goes away.

`Zookeeper::SEQUENCE`

  If the Zookeeper::SEQUENCE flag is set, a unique monotonically increasing sequence number is appended to the path name. The sequence number is always fixed length of 10 digits, 0 padded.

## ZooKeeper Log Levels

`Zookeeper::LOG_LEVEL_ERROR`

  Outputs only error mesages

`Zookeeper::LOG_LEVEL_WARN`

  Outputs errors/warnings

`Zookeeper::LOG_LEVEL_INFO`

  Outputs big action messages besides errors/warnings

`Zookeeper::LOG_LEVEL_DEBUG`

  Outputs all

## ZooKeeper States

`Zookeeper::EXPIRED_SESSION_STATE`

  Connected but session expired

`Zookeeper::AUTH_FAILED_STATE`

  Connected but auth failed

`Zookeeper::CONNECTING_STATE`

  Connecting

`Zookeeper::ASSOCIATING_STATE`

  Associating

`Zookeeper::CONNECTED_STATE`

  Connected

`Zookeeper::READONLY_STATE`

  TODO: help us improve this extension.

`Zookeeper::NOTCONNECTED_STATE`

  Connection failed

## ZooKeeper Watch Types

`Zookeeper::CREATED_EVENT`

  A node has been created

  This is only generated by watches on non-existent nodes. These watches are set using Zookeeper::exists.

`Zookeeper::DELETED_EVENT`

  A node has been deleted

  This is only generated by watches on nodes. These watches are set using Zookeeper::exists and Zookeeper::get.

`Zookeeper::CHANGED_EVENT`

  A node has changed

  This is only generated by watches on nodes. These watches are set using Zookeeper::exists and Zookeeper::get.

`Zookeeper::CHILD_EVENT`

  A change as occurred in the list of children

  This is only generated by watches on the child list of a node. These watches are set using Zookeeper::getChildren.

`Zookeeper::SESSION_EVENT`

  A session has been lost

  This is generated when a client loses contact or reconnects with a server.

`Zookeeper::NOTWATCHING_EVENT`

  A watch has been removed

  This is generated when the server for some reason, probably a resource constraint, will no longer watch a node for a client.

## ZooKeeper System and Server-side Errors

`Zookeeper::SYSTEMERROR`

  This is never thrown by the server, it shouldn't be used other than to indicate a range. Specifically error codes greater than this value, but lesser than Zookeeper::APIERROR, are system errors.

`Zookeeper::RUNTIMEINCONSISTENCY`

  A runtime inconsistency was found.

`Zookeeper::DATAINCONSISTENCY`

  A data inconsistency was found.

`Zookeeper::CONNECTIONLOSS`

  Connection to the server has been lost.

`Zookeeper::MARSHALLINGERROR`

  Error while marshalling or unmarshalling data.

`Zookeeper::UNIMPLEMENTED`

  Operation is unimplemented.

`Zookeeper::OPERATIONTIMEOUT`

  Operation timeout.

`Zookeeper::BADARGUMENTS`

  Invalid arguments.

`Zookeeper::INVALIDSTATE`

  Invliad zhandle state.

`Zookeeper::NEWCONFIGNOQUORUM`

  No quorum of new config is connected and up-to-date with the leader of last committed config - try invoking reconfiguration after new servers are connected and synced.

  Available as of ZooKeeper 3.5.0

`Zookeeper::RECONFIGINPROGRESS`

  Reconfiguration requested while another reconfiguration is currently in progress. This is currently not supported. Please retry.

  Available as of ZooKeeper 3.5.0

## ZooKeeper API Errors

`Zookeeper::OK`

  Everything is OK.

`Zookeeper::APIERROR`

  This is never thrown by the server, it shouldn't be used other than to indicate a range. Specifically error codes greater than this value are API errors (while values less than this indicate a Zookeeper::SYSTEMERROR).

`Zookeeper::NONODE`

  Node does not exist.

`Zookeeper::NOAUTH`

  Not authenticated.

`Zookeeper::BADVERSION`

  Version conflict.

`Zookeeper::NOCHILDRENFOREPHEMERALS`

  Ephemeral nodes may not have children.

`Zookeeper::NODEEXISTS`

  The node already exists.

`Zookeeper::NOTEMPTY`

  The node has children.

`Zookeeper::SESSIONEXPIRED`

  The session has been expired by the server.

`Zookeeper::INVALIDCALLBACK`

  Invalid callback specified.

`Zookeeper::INVALIDACL`

  Invalid ACL specified.

`Zookeeper::AUTHFAILED`

  Client authentication failed.

`Zookeeper::CLOSING`

  ZooKeeper is closing.

`Zookeeper::NOTHING`

  (not error) No server responses to process.

`Zookeeper::SESSIONMOVED`

  Session moved to another server, so operation is ignored.

`Zookeeper::NOTREADONLY`

  State-changing request is passed to read-only server.

`Zookeeper::EPHEMERALONLOCALSESSION`

  Attempt to create ephemeral node on a local session.

`Zookeeper::NOWATCHER`

  The watcher couldn't be found.

`Zookeeper::RECONFIGDISABLED`

  Attempts to perform a reconfiguration operation when reconfiguration feature is disabled.

## Table of Contents

- Zookeeper::addAuth — Specify application credentials
- Zookeeper::close — Close the zookeeper handle and free up any resources
- Zookeeper::connect — Create a handle to used communicate with zookeeper
- Zookeeper::__construct — Create a handle to used communicate with zookeeper
- Zookeeper::create — Create a node synchronously
- Zookeeper::delete — Delete a node in zookeeper synchronously
- Zookeeper::exists — Checks the existence of a node in zookeeper synchronously
- Zookeeper::get — Gets the data associated with a node synchronously
- Zookeeper::getAcl — Gets the acl associated with a node synchronously
- Zookeeper::getChildren — Lists the children of a node synchronously
- Zookeeper::getClientId — Return the client session id, only valid if the connections is currently connected (ie. last watcher state is ZOO_CONNECTED_STATE)
- Zookeeper::getConfig — Get instance of ZookeeperConfig
- Zookeeper::getRecvTimeout — Return the timeout for this session, only valid if the connections is currently connected (ie. last watcher state is ZOO_CONNECTED_STATE). This value may change after a server re-connect
- Zookeeper::getState — Get the state of the zookeeper connection
- Zookeeper::isRecoverable — Checks if the current zookeeper connection state can be recovered
- Zookeeper::set — Sets the data associated with a node
- Zookeeper::setAcl — Sets the acl associated with a node synchronously
- Zookeeper::setDebugLevel — Sets the debugging level for the library
- Zookeeper::setDeterministicConnOrder — Enable/disable quorum endpoint order randomization
- Zookeeper::setLogStream — Sets the stream to be used by the library for logging
- Zookeeper::setWatcher — Set a watcher function