[Vortex] [ANN] Turbulence 0.4.1 'Future Proof' release is ready!
Francis Brosnan Blazquez
francis at aspl.es
Mon May 3 19:36:50 CEST 2010
-= Turbulence 0.4.1 =-
"Future proof release"
Advanced Software Production Line is proud to announce
Turbulence 0.4.1 "Future proof" release: an open source BEEP
application server, written on top of Vortex Library 1.1.
Turbulence is a BEEP server extensible through modules and allows to
implement server side profiles that are used and combined later with
other profiles through run time configuration.
Turbulence is written to make easy to develop and deploy BEEP
profiles, allowing developers to provide a convenient configuration
interface to site administrators and end users.
Check out the following links to get ready with Turbulence:
[Vortex Library homepage]
[Sources and binaries]
[BEEP Core community web site]
[Axl Library, XML 1.0 implementation]
The release in short
Added support for mod-python, a module that allows to write server
side python apps that implements BEEP profiles. See documentation for
Added support to create child processes that can handle a particular
set of connections associated to a particular profile path.
Support includes reusing child process created for later connections
received that matches child's profile path handler.
Also added support to run master server and child processes under
selected uid and gid.
Added chroot support for master process and child process through
particular profile paths.
Added support to notify a module when a profile path was selected,
including when that selection was done because serverName request so
the module can load appropriate databases and settings associated to
Many bugs were fixed and many regression tests were added. Added lot
Changes since the 0.3.2
* [fix] fixed turbulence log reporting. It wasn't enabled at the proper
place causing some troubles. Added clean-start checks to ensure all
logs configured are opened and usable.
* [new] Added support for --disable-sigint option which disables
turbulence SIGINt signal handling which is helpful for debugging.
* [fix] Fixed amd64 bug located at logging code.
* [fix] Making turbulence to abort in the case the pid file can't be
* [new] Added new functions that allows to check for positive or
negative values inside configuration strings. API added:
* [new] Added first fully working mod-python module. This new module
will allow to execute server side python, allowing to create python
BEEP server side applications that takes advantage of Turbulence.
* [fix] Fixed bug inside turbulence_log_report which causes a segfault
on linux amd64 platforms.
* [new] Updated turbulence module API to include new functions to
check module existence or its name. Updated module loading code to
avoid loading the same module twice or different modules with the
same name. API added:
* [fix] Fixed wrong path configuration for mod-python exposed by
settings not having turbulence-config installed.
* [fix] Fixed naming issue with mod python load files..
* [fix] Making mod-sasl to now drop an error message while loading
remote administration list if the feature is disabled.
* [fix] Making the module to detect start-file configuration not ended
by .py. General cleanups around handling start_file value.
* [fix] Fixed GIL code to properly acquire/release the GIL once the
module it initialized and terminated.
* [new] Added initial working support to produce a child process that
will handle a particular request according to turbulence.conf
allowing to process separation increasing turbulence security. Also
updated code to allow changing user id and group id of child process
* [new] General update to reorganize signal handling so it can be used
by main turbulence process and children created. Updated turbulence
signal API to provide a common handling. API added:
* [new] Added support to change process root dir after a child process
* [new] Updated turbulence db-list API to include functions to unload
a list without dumping content back to the disk. API added:
* [new] Added support to configure if turbulence must terminate its
child processes or leave them as is once turbulence main process is
* [new] Added support to let the user to configure which modules must
be unloaded from memory after fork operation allowing. Updated
turbulence module API to include a function that unloads the module
notifying the module to do so. API added:
* [new] Updated turbulence module definition to include a new function
called "unload" which can be used by the module to terminate its
function in a context that the module may still be loaded in the
main process. This can be used to not do hard disk operations but
to only release memory.
* [fix] Updated tbc-mod-gen to produce module templates that also
includes unload function.
* [fix] Updated mod-sasl to use unload method to close and clean
memory used without trying to flush back to the disk.
* [fix] Fixed log handling for turbulence child process which was
causing to not catch logs produced.
* [fix] Fixed profile path dst selector.
* [new] Added support to configure a list of modules to be not loaded
by turbulence even having them placed at directories configured.
Added support to make this filter to detect module file name and
module internal configured name. Updated DTD and added documentation
to configuration example file.
* [fix] Committing missing updates.
* [fix] Added RTLD_GLOBAL to dlopen function (fixes mod-python
* [new] Added new module to implement I/O file descriptor
notifications. Module added turbulence-loop. Updated turbulence-log
module to use this new API to implement log handling from child
processes. API added:
- TurbulenceLoopOnRead (handler)
* [new] Added initial implementation to support local turbulence
management (connection to running process). This will allow to issue
commands and check status for the current local turbulence process.
* [fix] Fixed child pid removal once the child process has finished to
avoid killing such process on parent process termination.
* [new] Updated turbulence main API to include new support functions.
- turbulence_is_num (string check)
- turbulence_get_system_id (user and group id)
- turbulence_change_fd_owner (file system owner)
- turbulence_change_fd_perms (file system permissions)
* [fix] Fixed memory leak at turbulence run module while checking
modules to be skipped (<no-load /> directive).
* [new] Adding new module, turbulence mediator to allow creating plugs
that can produce events which are observable by other components
(subscribe). The intention is to use this to implement radmin
component as a module. Still more work is required. API added:
- TurbulenceMediatorHandler (handler)
- TurbulenceMediatorObject (type)
- TurbulenceMediatorAttr (enum)
* [new] Added regression test to check turbulence mediator api. Fixed
regression test to check SASL serverName support. Updated turbulence
mediator API to include API call support and other support
functions. API added:
* [new] Added initial code to implement tbc-ctl, a command line tool
to manage a running turbulence. Added initial code to implement
mod-radmin, a module that will handle remote administration and
status check requests (for now used by tbc-ctl).
* [fix] Added initial implementation to get user and password after
channel creation failure to activate SASL. Check how to restore
* [fix] Finished initial tbc-ctl version that downloads all commands
available from connected server. Added support to auto-complete
available commands. General memory cleanup.
* [fix] General mod-radmin updates. Still more work required. Added
general command handling, using a common format that will help
receiving the content at clients connected using different formats.
* [fix] Added fourth event data reference to turbulence mediator
* [fix] Updated turbulence conn mgr module to check for mod-radmin
module startup event to install its commands.
* [fix] General update to integrate all turbulence documentation into
* [fix] Moved API types to turbulence-types.h
* [new] Added support to allow starting turbulence without having
registered any profile. Configurable via
* [fix] Fixed plug API regression test.
* [new] Updated turbulence conn mgr module to include a function that
allows listing all connections registered, selected by a role and a
* [fix] Adding missing configuration file for regression test.
* [fix] Added new regression test to check basic profile path
* [fix] Making <connections/max-connections> directive to be optional
since under some circumstances it is not allowed by non
* [fix] Making turbulence log module cleanup to don't call to close on
unopened file descriptors.
* [fix] Fixed memory wrong access caused by a race condition between
on close detection and module cleanup from conn mgr module. Detected
and fixed by reg tests..
* [fix] Fixed configure.ac which wasn't properly setting
VORTEX_SASL_VERSION and VORTEX_TLS_VERSION.
* [fix] Updated regression test to check profile path in the case no
profile def can be applied to a connection. Check the connection is
* [fix] Documentation updates. Integrated administration manual into
* [fix] More documentation updates: integrated db-list and mod-sasl
documentation into doxygen main documentation..
* [fix] Integrated mod-sasl documentation into turbulence's main
* [fix] Integrating mod-tunnel documentation into turbulence's doc
* [fix] Added initial documentation to move turbulence module
* [fix] Fixed mod_radmin and tbc-ctl commands available download. More
work is required.
* [fix] Fixed documentation. Added initial changes to support "profile
provided by module" feature.
* [fix] Fixed reg. exp detection bugs. Added regression test to check
* [fix] Added regression test to check support for profile path
* [fix] Added initial work to fix and check child process creation..
* [fix] Making profile path selection to close the connection if no
profile path was selected after first channel start...
* [fix] Updated turbulence child process creation to unwatch the
connection from the reader at the parent process.
* [fix] More profile path updates..
* [fix] Fixed profile path serverName handling with process separation
is activated. Added reg test (test_01) to check its function. Still
more work required.
* [fix] Fixed turbulence_ctx_reinit to update current process pid.
* [fix] Making profile path selection to defer the decision until a
first channel start is received, in the case current profile path
configuration is not only address based (uses serverName).
* [new] Updated turbulence process API to include:
* [fix] More updates to check profile path support using serverName
and child processes. Fixed bug at child process creating which was
causing connections handled to be configured to not close its
socket. Added some delay handling to ensure wrong replies reaches
remote BEEP peer when a channel is not accepted (because profile
path denies it).
* [fix] More updates to reg test_10. Making server separation to not
close the connection if the channel start request fails.
* [fix] Adding initial reg test for <load> directive...
* [fix] Updated tbc-mod-gen to include ppath-selected handler.
* [fix] Added initial code to implement test_11 reg test that will
check profile path selected module notification.
* [new] Updated profile path module to include a function that returns
profile path identification. API added:
* [new] Updated turbulence module definition to include a new handler
which is called each time a profile path is selected. API added:
* [fix] Added some minor fixings to mod-python code..
* [fix] Committing missing reg test 11 updates.
* [fix] Committing missing conf file for test_11
* [new] Added support for to notify modules when a profile path has
been selected for a connection. This will allow modules to implement
particular behaviours according to serverName, etc..Added reg test
to check initial support (test_11).
* [new] Updated module API to include a general function that
implements handler notification. Updated
turbulence_module_notify_close and turbulence_module_notify_reload
to use this new function. API added:
- TurbulenceModHandler (enum)
* [fix] Making turbulence run to check module pointer file to be ended
* [fix] Making some updates to mod-sasl (still more work required) to
use new profile path selected notification.
* [fix] Updated mod-sasl to use common auth API. Updated code to
detect serverName requested in the case connection serverName is not
defined. Fixed memory deallocation bug when no default SASL
database is found.
* [fix] General regression test cleanups.
* [fix] More updates on regression tests and general fixings to
properly run them. Still more work is required.
* [fix] Added initial support to notify requested serverName so
modules at profile path selected notification can react loading
serverName appropriate settings. API added:
* [fix] Committing missing test files..
* [fix] Finished initial working support for mod-sasl to only load
database associated to serverName defined. Updated regression test..
* [fix] Committing example files..
* [new] Added support for work-dir attribute at profile path
definition, allowing modules and turbulence itself to implement user
defined functions by using content located at such location. Updated
turbulence ppath API to include a function to retrieve such value:
* [new] Added initial support to make mod-sasl to load user defined
databases located at work-dir (if defined).
* [fix] Making turbulence_module_notify to return boolean status in
the case some init or profile path selected handler fails. Updated
child process creation to check these values to stop or continue
according to clean start value.
* [fix] Updated mod-sasl support to load user defined databases.
* [fix] Finished initial working reg test_12 checking SASL with
process separation, different serverNames and user defined SASL
* [fix] Committing some fixes to properly run regression tests
to SASL function.
* [fix] Finished mod-sasl upgrade to support on demand serverName auth
databases. Added reg test test_12-a to check SASL support when no
child is created.
* [fix] Updated mod-python implementation to support profile path
notification so the module can load especific applications according
to serverName defined.
* [fix] Fixed mod-python wrong module load handling. Added initial
regression test to check its function (test_13).
* [fix] Completed first tests for mod-python after its code update to
support profile path.
* [fix] Completed first working reg test for mod-python. Helped to fix
some bugs. Added support to python apps defined to use src location
and work-dir from profile path to load its sources.
* [fix] Added initial implementation for reg test test_13-a to check
mod-python without child creation. Still more work is required.
* [fix] Committing .def updates and version components..
* [fix] Finished regression tests that checks mod-python without child
* [fix] Fixed wrong cleanup handling while closing db-list at
* [fix] Fixed turbulence main process lock on exit.
* [fix] Fixed wrong profile selection when only the serverName value
was configured. Added regression test to check this new function:
* [new] Added new macro to shutdown and release a connection
reference. Used to terminate connection references at child process
creation when applications hosted have initialization failures. API
- TBC_FAST_CLOSE (macro)
* [new] Updated mod-python code to allow configuring if the connection
must be closed in the case a python application associated fails to
initialize. This is used to signal client peer that an application
failure had happen...Option added to python.conf.
- close-conn-on-failure (option)
* [new] Updated mod-python to include tbc.error API.
* [new] Finished initial working version that allows child process
reuse for new connections that matches the profile path of the
child. NICE!! This is done by detecting if a turbulence child is
already handling the profile path detected for a connection,
transferring the connection to that child. Added regression test_15
and test_15a. Added skells test_16 and test_17. Updated turbulence
accepted configuration for profile path definitions to attend
reuse=yes conf. Still some work required.
* [new] Added support to Turbulence to configure default directories
used by its function. XML paths added:
(datadir, sysconfdir, runtime_datadir)
* [fix] Reorganized child process creation to be stored associated to
a profile path and represented with a TurbulenceChild structure.
* [new] Updated profile path module to make each profile path
definition to be identified with a single id. Updated profile path
* [fix] Making TBC_FAST_CLOSE to nullify conn reference to avoid the
caller using that closed reference further.
* [fix] Making common_sasl_load_config (mod-sasl) to nullify callers
backend reference when a load configuration failure is found.
* [fix] More updates on reg test test_15 to check child process
connection reuse. No bug found. Nice!
* [fix] Regexp support (some cases where failing). Updated regression
test to check those cases and its match status.
* [fix] General update to make child process created to release all
sockets and connections that are handled by the parent. Now those
connections won't be accessible from childs and they won't waste
available socket space. Added regression test (test_16).
* [fix] Some updates on makefiles..
* [fix] Committing some changes..
* [fix] Fixed race condition while creating a TurbulenceLoop object
that was causing to miss initial descriptors to be watched.
* [fix] Improved reg test 12 to support delay conditions..
* [fix] Added new regression test (test_17) to check concurrent random
connections accessing to the same profile path configured to create
a child and reuse connections.
* [fix] Started turbulence_get_system_id rewrite due to annoying leaks
reported by valgrind by getpwnam_r and getgrgid_r.
* [new] Added new function to implement microwaits on the current
thread.. API added:
* [fix] Added code to delay turbulence child finalization when vortex
reader reports no more connections watched to ensure there are no
connections in transit from the parent to the child in case of reuse
* [fix] Fixed wrong memory access inside
turbulence_process_receive_socket under cases where parent control
connection was closed.
* [fix] Updated turbulence conn mgr module to cleanup its resources
but acquiring its internal locks.
* [fix] More updates to turbulence_get_system_id..Still more work
* [fix] Added __turbulence_get_system_id_info to implement system
user/group id resolution. Added regression test 05-a to check
* [fix] Added missing test configuration file (test_17.conf).
* [fix] Added initial test to check how turbulence behave with
channels not accepted once a child process is created to handle it.
* [fix] Fixed child connection handling for profile paths activated on
connection phase (still no BEEP greetings took place). Added
regression test (test_18) to reproduce and check the issue.
* [fix] Update mod-python to include some debug comments.
* [fix] Added reg test (test_19) to check channel not accepted at
profile path selection and child process creation.
* [fix] Making child code that watches parent control connection to
stop and close such link in case of failures.
* [fix] Updated mod-python turbulence.Ctx type to include an internal
reference to the vortex.Ctx that is used. Updated code to reuse this
reference rather creating a new one.
* [fix] Fixed bug which was causing to not transfer profile path state
to connections passed to child process already created causing
policy to be not applied. Added reg test to reproduce and check fix
* [fix] Making mod-sasl to not return wrong initialization at profile
path select notification in the case a backend is already loaded but
no backend was available for the serverName notified or the profile
* [fix] Updated turbulence_module_notify to release and acquire the
lock for each handler notification (to support chained
* [new] Updated turbulence conn mgr module to include an API to find a
particular connection id. API added:
Also updated PyTurbulence API to include an API to provide a binding
to this function. API added:
* [fix] Fixed autogen.sh compile preparation issue (due to some GNU
extensions detected). Added -Wno-portability to fix the problem for
* [fix] modules/mod-radmin/Makefile.am: full path calling
* [fix] configure.ac: changed turbulence-config permissions to set it
* [fix] tools/tbc-mod-gen/support.c: assign function return value to
variable (now is an error).
* [fix] src/Makefile.am: changes to fix error linking with exarg.
* [fix] src/turbulence.c, tools/tbc-mod-gen/support.c, src/exarg.c,
src/turbulence-log.c: assign function return value to variable (now
is an error) printf can't now receive directly a char * variable
open with O_CREAT must receive a 3th argument
* [fix] Adding some additional debug to track connections passed to
* [fix] Added regression test (test_21) to check connection ids
retention on child process created when reuse is enabled. Bug found
ASPL (Advanced Software Production Line) is a Spanish company that
provides services and support to introduce open source products into
It has more than 8 years of experience and its main development line
is to provide software development and support to install GNU/Linux
Contact us, English or Spanish, to get commercial support and/or
BEEP based development services.
You can reach us:
http://www.aspl.es - info at aspl.es
Francis Brosnan Blázquez - francis at aspl.es
Advanced Software Production Line - http://www.aspl.es
3th may 2010, Madrid (Spain)
More information about the Vortex