[Vortex] [ANN] Vortex Library 1.1.3 'Hurricane' is ready!
Francis Brosnan Blazquez
francis at aspl.es
Fri Mar 5 12:19:48 CET 2010
## Vortex Library 1.1.3 ##
## "Hurricane" ##
Advanced Software Production Line is proud to announce Vortex
Library 1.1.3 "Hurricane" release availability: an open source "BEEP
Core" protocol implementation written in C, mapped onto TCP/IP.
Vortex Library is a stable and robust application protocol
development toolkit, with active support for Microsoft Windows and
Check out the following links to get ready with Vortex Library:
[Vortex Library homepage]
[Turbulence BEEP server homepage]
[Sources and Win32 binaries]
[BEEP Core community web site]
[Axl Library, XML 1.0 implementation]
This release in short
* Starting this release, now every vortex connection created will
notify serverName attribute on first channel either using value
provided by application caller or acquiring it from the host we
are connecting to.
* Improved/rewritten greetings handling reply to allow listener side
to hook on that event deciding what to reply rather replying
* Many improvements to better integrate vortex when it is used in
conjunction with fork() call. Added support to receive channel
start in one process, and handle its reply in another
process...powerful! Used this new support by Turbulence to handle
connection reuse by childs created.
* General update to thread pool API to allow increasing and
decreasing workers (threads) dynamically.
* General updates to PyVortex to include new methods to existing
classes and support for channel pools (vortex.ChannelPool).
* Applied many, many improvements, API updates, bug fixes and
<Dhiraj Prasad> (Reported missing TLS activate notification on
<Ralf Konusch> (Helped and reported bugs on reply handling using
channel pools. Helped on spotting memory consumption problems with
axlHash structure used by vortex to store internal state. Provided
many comments and suggestions that were useful to improve thread
pool API. Reported bug on channel serialization code when handling
replies using ANS/NUL series, when they are interleaved, or issued
in an out of order manner, on the same channel).
Changes since 1.1.2
* [fix] Added new regression test to check channel pool ready
indication for ANS/NUL interactions... No bug was found.
* [fix] Fixed post creation notification for master listener
* [new] General update to support connection options through
VortexConnectionOpts. Used this new support to implement greetings
serverName feature. API added:
- VortexConnectionOpts (type)
- VortexConnectionOptItem (enum)
- vortex_connection_opts_new (function)
- vortex_connection_opts_free (function)
- CONN_OPTS (macro)
* [new] Updated vortex connection API to include a new function to
create a BEEP connection with extended options. Updated
vortex_connection_new to be built on top of this new function. API
* [new] Added support for a new action stage:
CONNECTION_STAGE_PROCESS_GREETINGS_FEATURES which allows getting
notifications after client greetings received.
* [fix] Updated vortex engine to make listener peer to not reply with
initial greetings until client greetings are received, allowing to
react according to client greetings received (especially for
* [new] Updated vortex ctx module to include a function to control if
automatic serverName feature must be implemented. Now by default
vortex will notify serverName used on connection options or, if not
provided, the host name used to connect, on the first channel
created. API added:
* [new] Updated vortex tunnel API to include a new function that
allows configuring connections options to be used. API added:
* [new] Updated greetings module to include support to send back a
error greetings with a code and a message denying the service when
required. Updated API to include a function to implement this
* [fix] More updates on regression test (test_01g) to check serverName
on greetings feature implemented. Still more work is required.
* [fix] Finished regression test work (test_01g) to check serverName
feature on greetings. Nice!
* [fix] Fixed frame deallocation (memory leak) in case listener
greetings send fails or client greetings is not accepted at listener
* [fix] Improved wrong BEEP header detection. Added reg test
* [fix] More updates for serverName automatic configuration..
* [fix] Added new internal function that allows unwatching a
connection from the vortex reader loop. API added:
* [fix] General internal modifications to split channel start handling
to allow stopping it and later handle reply at a different process.
* [fix] Cleanup start handling code..
* [new] Updated vortex profiles API to include a new function that
allows configuring the frame received handler for a registered
profile. API added:
* [fix] Making vortex sequencer reinitilization to check and dealloc
internal structures that may be defined in a fork operation so this
memory isn't lost.
* [fix] CHANGE-NOTIFICATION: Updated
vortex_connection_is_profile_filtered and VortexProfileMaskFunc to
include the profile content encoding, and the frame received (in
the case of channel start notification) according to
* [fix] Making vortex thread pool reinitialization to check and
dealloc internal structures that may be defined in a fork operation
so this memory isn't lost.
* [fix] Making internal changes to channel start reply handling so it
can be decoupled and implemented later in another thread or
* [new] Updated vortex support API to include a function to check if a
search path is already added. Updated search path initialization to
check paths before adding them (to avoid leaking via paths allocated
but not added). Bug exposed by turbulence reg test.
* [fix] More updates to cleanup resources at vortex reader after fork
operation. Added code to release all connection that were handled by
the parent process..
* [fix] Fixed wrong memory deallocation for error message returned by
* [fix] Fixed on close notification causing some handlers to be not
called in the case several are installed and some of them removes
themselves during the call. Added regression test to reproduce the
problem and fix the issue (test_02a1).
* [fix] Fixed missing error message reply for channel start filtered.
* [fix] Added missing socket close calls during connect failure.
* [fix] Updated test certificates used by regression test.
* [fix] Fixed documentation and updated section about TLS test
certificate generation section.
* [fix] Updated sasl extension to provide serverName requested to
common auth handler in the case SASL channel is the first setting
serverName. Still required reg test.
* [fix] Added regression test to check serverName notification for
SASL auth on first channel.
* [fix] Added channel reference handling to avoid races at
* [fix] Fixed bug at TLS implementation causing a caller to
vortex_tls_start_negotiation/vortex_tls_start_negotiation_sync to be
never notified for the first case and blocked during 60 seconds for
the second case. Added reg test (test_05b) to reproduce the problem
and check the fix introduced. Bug reported by Dhiraj Prasad.
* [fix] Added regression test to check vortex_connection_new fast
error reporting in case of unreachable address.
* [fix] Fixed compilation error at vortex-regression-client caused by
code only activated on windows.
* [new] Updated PyVortex Channel and Connection classes to include a
couple of methods that allows python's reference count manipulation.
Added regression test to check how they work (test_10_b). API added:
Updated API documentation.
* [fix] General memory allocation improvements to make connection
internal structures to be not allocated until they are required.
* [fix] Added memory allocation checks to avoid accessing NULL memory.
Still more work is required.
* [fix] Making vortex_connection_set_profile_mask and
vortex_connection_is_profile_filtered to be thread safe.
* [fix] Fixed bug inside vortex_channel_is_ready which wasn't checking
for pending outstanding MSG.
* [fix] Making vortex_frame_get_next to close the connection in the
case there is no memory to allocate the frame received.
* [fix] Fixed lock caused by calling
* [fix] Added check at vortex.Connection python constructor to ensure
first argument received is indeed a vortex.Ctx.
* [new] Updated vortex.Connection to include an attribute to return
current serverName configured. Updated documentation. API added:
* [fix] Adding internal function __vortex_channel_set_state to help
turbulence to restore channel 0 status after transfer socket between
* [fix] Refactored socket limit reached code to also place it at the
client initiator (vortex_connection_sock_connect). Fixes server side
listener limit reached handling for sockets not created by accept(2)
* [fix] Making vortex reader process to flag its own reinitialization
so channels that are released under that process do not lock
* [fix] Added new function that allows to configure that logs sent to
user debug handler are first prepared so the handler do not requires
to handle printf format conversion. Added regression test to check
its function. API added:
* [fix] Updated vortex_socket_close macro to avoid calling socket
close if socket descriptor is not valid.
* [fix] Added initial call vortex_async_queue_release to release
queues in the case of a reinitialization after a fork operation.
* [new] Updated PyVortex. Added ctx attribute to vortex.Connection to
return connection context. API added:
- vortex.Connection.ctx (read only attribute)
* [new] Updated PyVortex API to include access to connection unique
identification. API added:
- vortex.Connection.id (read only attribute).
* [fix] Updated PyVortex internals to bind objects life time to
vortex.Ctx created rather to C VortexCtx reference. This solves
memory deallocation issues especially when python code install
references to modules that are later unloaded but VortexCtx C
reference is still working. This shows problems when turbulence
unloads mod-python but its structures still reference to python
objects stored..This is now solved binding/storing python objects
into vortex.Ctx via internal API:
* [fix] Updated internal code to reuse as much as possible already
created references. Check regression test.
* [fix] Moved data registration code at
py_vortex_profile_frame_received to avoid races between the data is
configured and the frame handler is called.
* [fix] Updated PyVortex vortex.Connection API to allow providing the
serverName to be used on next channel start request. Updated
* [fix] Updated vortex channel pool internals to detect if a channel
is ready by using vortex_channel_is_ready rather
* [new] Updated vortex connection API to include a new function that
allows to install on close handlers configuring when they are
executed. Updated previous close handlers to use this implementation
providing same behavior. Updated vortex channel start code to use
this new handler to avoid executing user on close code first rather
system handlers. API added:
* [fix] Added PyVortex reg test (test_12_a) to reproduce and check fix
introduced to detect on close connection during start channel
operation. Previous close was deadlocking if the user configured an
on close handler and then started a channel for which its connection
is closed in the middle of the operation.
* [fix] Added some debug log to on close notification. Added initial
test to PyVortex to check async notifications during channel start
* [fix] Added initial code to check thread pool tasks
handling. Updated thread pool API to return some stats about pending
jobs, free threads and started threads. Still more work is
required. API added:
* [fix] Defining fixed values for VortexEncoding type to make it easy
to other languages binding vortex to assume those values.
* [new] Updated PyVortex to include encoding values for channel start
profile content notification:
* [new] Updated PyVortex conn.open_channel to support serverName, and
* [fix] Fixed PyVortex conn.open_channel to allow other threads to
enter into python context during channel creation allowing other
async notifications to be completed. Added regression test test_12_b
to check bug and fix introduced.
* [fix] Updated vortex_log_enable, vortex_log2_enable and
vortex_color_log_enable to not modify environment variable and flag
setting as checked.
* [new] Updated thread pool module to allow adding new threads at run
time. Used this new code to initialize vortex. API added:
Updated test_00-a reg test to check now a pool with no available
threads handles pending jobs when new threads are added.
* [fix] Fixed vortex_thread_pool_get_num which was causing to fail on
* [fix] Added some being/end threads macros to PyVortex functions.
* [fix] Fixed missing checked flag at vortex_color_log_enable.
* [fix] Added more PyVortex documentation. Renamed
vortex.encoding_BASE to vortex.encoding_BASE64
* [new] Updated PyVortex connection API to include two new methods to
store and retrieve user references. API added:
Added regression test to check function (test_03_a).
* [fix] Added debug log to vortex_channel_get_reply to notify that a
NULL reference queue was received.
* [fix] Fixed PyVortex conn.set_on_close notification which was not
properly notifying the conn reference at listener side when the
handler was configured as a consequence of another handler
* [fix] Updated PyVortex connection reference allocation at listener
side to reuse references rather creating and finishing them for each
handler notification. Solves memory/performance issue and also fixes
missing references problem experienced at listener side.
* [new] Updated PyVortex conn.open_channel to also support async
channel creation and notification through on_channel
handler. Updated documentation. Added regression test to check
function (test_10_c and test_10_d for failure notification).
* [fix] Adding more PyVortex documentation..
* [fix] Added initial code to implement ans/nul replies to reproduce
missing nul frames bug...
* [fix] Rewritten channel serialize code to be seqno based rather
msgno and frame type. This solves some issues with heavily loaded
frame handlers that causes some NUL frames (stored as -1) to be
missed. Also fixed connection dealloc failures when channel
serialize is enabled and ANS/NUL frames are received. Added reg test
test_03c to reproduce the problem and check fix introduced.
* [fix] Finally finished out of order reply handling for
different/parallel ANS/NUL replies over the same channel. Updated
regtest test_03-c to reproduce and check fix introduced. Still more
work required to better test current function.
* [fix] Fixed bug at new reply sending code for ANS/NUL series which
wasn't restoring next ansno to be used. Updated test_03c reg test to
reproduce the bug and check the issue.
* [fix] Updated vortex channel send MSG support to allow limiting how
many outstanding messages can be hold until the caller is locked
until some replies come in. This allow to limit memory consumption by
avoiding storing messages until they can be sent. Updated vortex
channel API to include a couple of functions that allows to
configure such limit and to get current outstanding message queue
Added regression test (test_01-k) to check function introduced.
* [new] Updated vortex thread pool API to include a function to remove
threads from the pool. API added:
Updated regression test (test_00-a) to check API introduced.
* [fix] Added a couple of regression tests to check memory consumption
while using channel pool and channel serialize (test_01-l and
test_01-o). Reg tests showed bugs on axl hash implementation and
its capacity to properly retain internal nodes (causing linear
memory consumption in long running applications).
* [fix] Updated py_vortex_connection_find_reference documentation.
* [new] General update to PyVortex to support channel pools. Still
more work required.
* [fix] More updates to complete vortex.ChannelPool python API. Still
more work required.
* [fix] More updates on PyVortex channel pools. Added macro to easily
check and throw non callable object exception. API added:
* [fix] More updates on vortex.ChannelPool API. Still more work
* [new] Updated vortex channel pool module to include a new function
that returns number of channels that are available. API added:
* [new] Updated PyVortex ChannelPool API to include attributes to
return channel pool count and channel pool available count. Added
implementation to release channels. Checked next_ready () and
release() method with reg test test_21 (pyvortex).
- vortex.ChannelPool.release ()
* [fix] Fixed some documentation warnings.
* [fix] Fixed wrong user pointer notification at channel pool create
handler when a pointer is defined at
vortex_channel_pool_get_next_ready_full. Added reg test test_03d to
check the problem and the fix introduced.
* [fix] Updated PyVortex channel pool code to support channel pool
create notification and channel pool create user land handler. Still
working with frame received channel pool. Added reg test to check
* [new] Updated PyVortex Connection API to allow getting the default
pool and a particular pool. Updated PyVortex ChannelPool API to
allow returning the connection associated to a pool. Updated
ChannelPool internals to allow other modules to find and reuse
channel pool references already created. API added:
- vortex.Connection.pool() (method)
- vortex.ChannelPool.conn (attr)
* [fix] Fixed wrong null handling at vortex_ctx_set_full_data which
was causing to not properly handle remove cases triggered by
receiving a NULL value associated to a previously stored key.
* [fix] General updates to PyVortexChannelPool to properly implement
current API without leaking memory. Completed py vortex reg tests
test_21 and test_22 without exceptions and memory problems. NICE!!
* [new] Added new regression test to check channel window size
reduction Test 04-d.
* [fix] Updated SEQ frame log debug to fix test_04-d
* [fix] Fixed wrong channel window SEQ frame notification when it is
produced a shrink. Now this is detected, reusing currently advised
max seqno accepted, applying same rules for future SEQ frame
updates. Added regression test to reproduce the problem and check
the fix introduced (test 04-d).
* [fix] Updated PyVortex connection.channel_pool_new to change
frame_received -> received
frame_received_data -> received_data
on_created_channel_pool -> on_created
Updated documentation and regression test to check the change
* [fix] Updated documentation to include new methods and attributes.
Advanced Software Production Line provides GNU/Linux support and
consulting services to help organization to introduce GNU/Linux
inside its process.
Contact us, using 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
We hope Vortex Library help you. Enjoy Vortex Library!
Francis Brosnan Blázquez - francis at aspl.es
Advanced Software Production Line - http://www.aspl.es
5th Mar 2010, Madrid (Spain)
More information about the Vortex