Commit f6ec72ed authored by Patrick D. Hunt's avatar Patrick D. Hunt
Browse files

Initial snapshot of code that was originally imported from SourceForge to...

Initial snapshot of code that was originally imported from SourceForge to Apache, this tag has all changes detailed in ZOOKEEPER-45. A diff btw tags apache-initial-import and this tag has all the changes applied specific to ZOOKEEPER-45.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/zookeeper/tags/post_ZOOKEEPER-45_snapshot@671317 13f79535-47bb-0310-9956-ffa450edef68
parent 67ca3cde
Release 2.1.1 Release 2.1.1
2008-04-30 Andrew Kornev <akornev@users.sourceforge.net> 2008-04-30 Andrew Kornev <akornev@users.sourceforge.net>
* changed the distributino package name to "c-client-src" * changed the distributino package name to "c-client-src"
Release 2.1.0 Release 2.1.0
2008-04-30 Andrew Kornev <akornev@users.sourceforge.net> 2008-04-30 Andrew Kornev <akornev@users.sourceforge.net>
* added the client latency diagnostics; the client prints a warning when the * added the client latency diagnostics; the client prints a warning when the
reponse latency exceeds 20ms reponse latency exceeds 20ms
* modified logging format to report the znode path for which the zookeeper * modified logging format to report the znode path for which the zookeeper
operation is called operation is called
* fixed a minor bug where error messages were missing for some of the newer * fixed a minor bug where error messages were missing for some of the newer
zookeeper error codes (ZCLOSING and ZNOTHING). zookeeper error codes (ZCLOSING and ZNOTHING).
* improved logging by adding the XID to the message to make it easy to match * improved logging by adding the XID to the message to make it easy to match
requests to responses requests to responses
* fixed the bug causing sporadic session termination and timeouts * fixed the bug causing sporadic session termination and timeouts
* added a new return code to zookeeper_process() -- ZNOTHING -- * added a new return code to zookeeper_process() -- ZNOTHING --
that indicates that the socket has no more data to read that indicates that the socket has no more data to read
* more unit tests added * more unit tests added
Release 1.1.3 Release 1.1.3
2008-02-07 Andrew Kornev <akornev@users.sourceforge.net> 2008-02-07 Andrew Kornev <akornev@users.sourceforge.net>
* get_xid() is not thread-safe (xid initialization race condition * get_xid() is not thread-safe (xid initialization race condition
in the multi-threaded mode). in the multi-threaded mode).
* the I/O thread doesn’t automatically terminate on AUTH_FAILURE and * the I/O thread doesn’t automatically terminate on AUTH_FAILURE and
SESSION_EXPIRED events. SESSION_EXPIRED events.
* all session events should be processed on the completion thread. * all session events should be processed on the completion thread.
* PING operation doesn’t atomically enqueue the completion and * PING operation doesn’t atomically enqueue the completion and
send buffers like other operations do. send buffers like other operations do.
* corrected zookeeper_init() doxygen docs. * corrected zookeeper_init() doxygen docs.
* new unit tests added. * new unit tests added.
Release 1.1.2 Release 1.1.2
2008-01-24 Andrew Kornev <akornev@users.sourceforge.net> 2008-01-24 Andrew Kornev <akornev@users.sourceforge.net>
* fixed a race condition caused by the code in zookeeper_process() * fixed a race condition caused by the code in zookeeper_process()
and free_completions() setting sc->complete to 1 without proper and free_completions() setting sc->complete to 1 without proper
synchronization; synchronization;
* fixed zoo_get() not updating buffer_len value with the actual * fixed zoo_get() not updating buffer_len value with the actual
buffer length on return; added missing enter_critical/leave_critical buffer length on return; added missing enter_critical/leave_critical
calls to the async ZK operations. calls to the async ZK operations.
* Replaced select() with poll() to fix the problem with the FD_SET * Replaced select() with poll() to fix the problem with the FD_SET
macro causing stack corruption for FDs higher than 1024 macro causing stack corruption for FDs higher than 1024
* Added zoo_set_log_stream() to the public API. The function allows * Added zoo_set_log_stream() to the public API. The function allows
applications to specify a different log file. applications to specify a different log file.
* Removed unused declarations from zookeeper.h (ACL related) * Removed unused declarations from zookeeper.h (ACL related)
* changed zoo_get() signature to take a pointer to buffer length. * changed zoo_get() signature to take a pointer to buffer length.
The function sets the parameter to the actual data length upon return. The function sets the parameter to the actual data length upon return.
* the watcher callback now takes the zhandle as its first parameter. This * the watcher callback now takes the zhandle as its first parameter. This
is to avoid a race condition in the multi-threaded client when a watcher is to avoid a race condition in the multi-threaded client when a watcher
is called before zookeeper_init() has returned. is called before zookeeper_init() has returned.
* fixed zookeeper_close() resource leaks and race conditions, * fixed zookeeper_close() resource leaks and race conditions,
fixed the race condition causing xid mismatch. fixed the race condition causing xid mismatch.
* added support for cppunit, added new targets: "check" and "run-check" * added support for cppunit, added new targets: "check" and "run-check"
to build and run unit tests. to build and run unit tests.
* Changed the signature of zookeeper_init(): it now takes a context pointer * Changed the signature of zookeeper_init(): it now takes a context pointer
as a parameter. This is to avoid a race condition in the multi-threaded client. as a parameter. This is to avoid a race condition in the multi-threaded client.
* Using a self-pipe rather than SIGUSR1 to wake up select() in the I/O thread * Using a self-pipe rather than SIGUSR1 to wake up select() in the I/O thread
* Added the doxygen target to the autoconf scripts * Added the doxygen target to the autoconf scripts
* Pulled out the logging functionality from zookeeper.c to zk_log.c/.h. * Pulled out the logging functionality from zookeeper.c to zk_log.c/.h.
Fixed a minor issue with PING responses being unnecessarily put on Fixed a minor issue with PING responses being unnecessarily put on
the completion queue rather than simply dropped. Make use of DLL_EXPORT the completion queue rather than simply dropped. Make use of DLL_EXPORT
symbol for building shared lib on cygwin. symbol for building shared lib on cygwin.
* Implemented new Zookeeper operation sync() to flush the leader channel * Implemented new Zookeeper operation sync() to flush the leader channel
to ensure that all updates have reached the followers. to ensure that all updates have reached the followers.
* Synchronous methods not being handled properly on disconnect * Synchronous methods not being handled properly on disconnect
* breed: fixed an incorrect parameter passed to zookeeper API by * breed: fixed an incorrect parameter passed to zookeeper API by
the Sync API wrapper functions the Sync API wrapper functions
* breed: the set and delete commands now support both Sync and Async API. * breed: the set and delete commands now support both Sync and Async API.
Prefix the command name with an 'a' to call the Async API: aset, adelete Prefix the command name with an 'a' to call the Async API: aset, adelete
* Make sure mutexes and condition variables are properly initialized * Make sure mutexes and condition variables are properly initialized
and destroyed and destroyed
* Fixed zookeeper_close() causing core dumps with mt_adaptor * Fixed zookeeper_close() causing core dumps with mt_adaptor
Release 1.0.0 Release 1.0.0
2007-11-27 Andrew Kornev <akornev@users.sourceforge.net> 2007-11-27 Andrew Kornev <akornev@users.sourceforge.net>
* configure.ac and Makefile.am added support for GNU autotools * configure.ac and Makefile.am added support for GNU autotools
* recordio.c/.h updated jute IO routines to use bit-explicit integer types * recordio.c/.h updated jute IO routines to use bit-explicit integer types
(int32_t vs. int, and int64_t vs. long long) (int32_t vs. int, and int64_t vs. long long)
* README rough draft * README rough draft
\ No newline at end of file
Installation Instructions Installation Instructions
************************* *************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006 Free Software Foundation, Inc. 2006 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it. unlimited permission to copy, distribute and modify it.
Basic Installation Basic Installation
================== ==================
Briefly, the shell commands `./configure; make; make install' should Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for more-detailed instructions are generic; see the `README' file for
instructions specific to this package. instructions specific to this package.
The `configure' shell script attempts to guess correct values for The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package. those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for file `config.log' containing compiler output (useful mainly for
debugging `configure'). debugging `configure').
It can also use an optional file (typically called `config.cache' It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale disabled by default to prevent problems with accidental use of stale
cache files. cache files.
If you need to do unusual things to compile the package, please try If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you some point `config.cache' contains results you don't want to keep, you
may remove or edit it. may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if `configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version you want to change it or regenerate `configure' using a newer version
of `autoconf'. of `autoconf'.
The simplest way to compile this package is: The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type 1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. `./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for. some messages telling which features it is checking for.
2. Type `make' to compile the package. 2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with 3. Optionally, type `make check' to run any self-tests that come with
the package. the package.
4. Type `make install' to install the programs and any data files and 4. Type `make install' to install the programs and any data files and
documentation. documentation.
5. You can remove the program binaries and object files from the 5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came all sorts of other programs in order to regenerate files that came
with the distribution. with the distribution.
Compilers and Options Compilers and Options
===================== =====================
Some systems require unusual options for compilation or linking that the Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for `configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables. details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here by setting variables in the command line or in the environment. Here
is an example: is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix ./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details. *Note Defining Variables::, for more details.
Compiling For Multiple Architectures Compiling For Multiple Architectures
==================================== ====================================
You can compile the package for more than one kind of computer at the You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'. source code in the directory that `configure' is in and in `..'.
With a non-GNU `make', it is safer to compile the package for one With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture. reconfiguring for another architecture.
Installation Names Installation Names
================== ==================
By default, `make install' installs the package's commands under By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You `/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'. `configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries. PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix. Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them. you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features Optional Features
================= =================
Some packages pay attention to `--enable-FEATURE' options to Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package. `configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the `README' should mention any `--enable-' and `--with-' options that the
package recognizes. package recognizes.
For packages that use the X Window System, `configure' can usually For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't, find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations. `--x-libraries=DIR' to specify their locations.
Specifying the System Type Specifying the System Type
========================== ==========================
There may be some features `configure' cannot figure out automatically, There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on. but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_ Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system `--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form: type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms: where SYSTEM can have one of these forms:
OS KERNEL-OS OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't `config.sub' isn't included in this package, then this package doesn't
need to know the machine type. need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will use the option `--target=TYPE' to select the type of system they will
produce code for. produce code for.
If you want to _use_ a cross compiler, that generates code for a If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will "host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'. eventually be run) with `--host=TYPE'.
Sharing Defaults Sharing Defaults
================ ================
If you want to set default values for `configure' scripts to share, you If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'. values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then `configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the `PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script. `CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script. A warning: not all `configure' scripts look for a site script.
Defining Variables Defining Variables
================== ==================
Variables not defined in a site shell script can be set in the Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example: them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc ./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround: an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation `configure' Invocation
====================== ======================
`configure' recognizes the following options to control how it operates. `configure' recognizes the following options to control how it operates.
`--help' `--help'
`-h' `-h'
Print a summary of the options to `configure', and exit. Print a summary of the options to `configure', and exit.
`--version' `--version'
`-V' `-V'
Print the version of Autoconf used to generate the `configure' Print the version of Autoconf used to generate the `configure'
script, and exit. script, and exit.
`--cache-file=FILE' `--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE, Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching. disable caching.
`--config-cache' `--config-cache'
`-C' `-C'
Alias for `--cache-file=config.cache'. Alias for `--cache-file=config.cache'.
`--quiet' `--quiet'
`--silent' `--silent'
`-q' `-q'
Do not print messages saying which checks are being made. To Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error