/Clusterlib

Library and tools for building distributed applications

Primary LanguageC++Apache License 2.0Apache-2.0

README for clusterlib
=====================

Large-scale distributed applications are difficult and time-consuming
to develop since a great deal of effort is spent solving the same
challenges (consistency, fault-tolerance, naming problems, etc.).
Additionally, coordinating these applications is typically ad-hoc and
hard to maintain.  Clusterlib fills the gap by providing distributed
application developers with an object-oriented data model,
asynchronous event handling system, well-defined consistency
semantics, and methods for making coordination easy across
cooperating applications.


Package Contents:

Clusterlib library
- Infrastructure for building and managing distributed applications

ActiveNode
- A process that is designed to be run on a physical node and manages processes
  started through clusterlib's process management system.  It will create a 
  clusterlib Node in the clusterlib object hierarchy and register a health 
  checker for reporting health.

Zookeeper user interface (ZKUI)
- An http server that can display and manipulate Zookeeper znodes or 
  clusterlib objects 

Command line interface (CLI)
- Can make changes to clusterlib objects from the command line with this tool. 
  It also can be used as an interactive shell for manipulating clusterlib 
  objects

Unittests
- Can be run in single or multiple process node and tests the correctness of
  many APIs.  It is only compiled when MPICH can be found.

Source Directory Structure:

docs                Doxygen generated content and notes
src/activenode      ActiveNode implmentation
src/cli             CLI implementation
src/core	    Internal clusterlib objects implementation
src/core/md5        MD5 implementation from RSA Data Security, Inc.
src/example         Several example programs that use clusterlib object 
src/gui             Base directory for ZKUI
src/gui/conf	    Configuration files for ZKUI process
src/gui/regressions ZKUI regression tests
src/gui/src	    ZKUI imlplementation
src/gui/unittest    ZKUI unittests
src/gui/webroot     Directory that is served by the ZKUI server
src/include         Include files for application developer consumption
misc                Miscellaneous scripts or configuration files
regressions         Clusterlib regression tests
unittests           Clusterlib unittests


Generated directory structure:

zookeeperServerDir  Directory for storing Zookeeper data for testing
install             Generated from 'make package': the essential headers, 
		    library, configuration files, and executables


Required Dependencies:

boost regex     (http://www.boost.org)
zookeeper 	(http://hadoop.apache.org/zookeeper/)
logcxx    	(http://logging.apache.org/log4cxx/)


Optional Dependencies:

cppunit               - Core library unit tests
mpich2                - clusterlib unittests
readline, ncurses     - CLI tab completion
libmicrohttpd         - ZKUI
apr-1, aprutil-1      - ZKUI XML parsing
boost auto_unit_test  - ZKUI unittests
doxygen               - Doxygen documentation


Building:

autoreconf -if
Set the CXX, CXXFLAGS, CPPFLAGS, and LDFLAGS appropriately.
./configure
make


Running Core Unittests:

make check

More details and options on how to run unittests are in the directory
unittests.


Extending clusterlib:

Add new Notifyable objects (subclass Notifyable)
- Create an interface (i.e. class Application)
- Create an implementation (i.e. class ApplicationImpl)
- (optional) Create cached interfaces (i.e. class CachedKeyValues)
- (optional) Create cached implementation (i.e. class CachedKeyValuesImpl)
- Register your implementation in FactoryOps (i.e. registerNotifyable())

=====================

Clusterlib used several 3rd party open source libraries and tools. The
following portions of this file summarize the tools used, their
purpose, and the licenses under which they're released.

Except as specifically stated below, the 3rd party software packages
are not distributed as part of this project, but instead are
separately downloaded from the respective provider and built on the
developer's machine as a pre-build step. 

boost 
-Source: http://www.boost.org/
-License: http://www.boost.org/LICENSE_1_0.txt

log4cxx
-Source: http://logging.apache.org/log4cxx/download.html
-License: Apache License, Version 2.0

zookeeper
-Source: http://hadoop.apache.org/zookeeper/releases.html
-License: Apache License, Version 2.0

libmicrohttpd
-Source: http://gnunet.org/libmicrohttpd/
-License: LGPL

The following 3rd Party code is included as part of this Project: 

md5 test driver 
-Souce: RSA Data Security, Inc.
-License: none

bluff.js 0.3.4
-Source: http://bluff.jcoglan.com/
-License: MIT

excanvas.js 0.4.0 (optional)
-Source: http://code.google.com/p/explorercanvas/
-License: Apache License, Version 2.0

query.zend.jsonrpc.js 1.0 
-Source: http://blog.jtclark.ca/tag/javascript/
-License: MIT

jQuery UI 1.8.5
-Source: http://jqueryui.com/
-License: MIT

jQuery JavaScript Library 1.4.2
-Source: http://jquery.com/
-License: MIT

TableSorter 2.0.3
-Source: http://tablesorter.com/docs/
-License: MIT and GPL

jQuery File Tree Plugin 1.01
-Source: http://abeautifulsite.net/2008/03/jquery-file-tree/
-License: Creative Commons 3.0

js-class.js
-Source: http://jsclass.jcoglan.com/
-License: MIT

parseUri 1.2.1
-Source: http://blog.stevenlevithan.com/archives/parseuri
-License: MIT