RBNB Release Notes
RBNB V3.1 Release Notes
V3.1B4 to V3.1B4a Changes
V3.1B4a released 05/28/2008WebDAVServlet
- Tweeked previous attach-to-detached source change. Was not properly updating server channel metadata on WebDav channel put.
V3.1B3 to V3.1B4 Changes
V3.1B4 released 05/23/2008
General
- In the IzPack installation: changed URL to dataturbine.org
- Source/build.xml: Change 'target' to 'dir' in build.xml, was broken on netbeans.
- Update WebTurbine HTML home page to reference updated Developer Guide
- Updated DataTurbine Developer Guide V3
Server
- When
the upstream side of a Mirror is terminated, the downstream output
Source side of the Mirror is now detached (data still available in
RBNB) rather than stopped (unloaded from the RBNB). Add a new Java flag
for overriding this default behavior:
–Dpersistentmirror=<true|false>
- Source close synchs with server; lost frames zeroed to prevent deadlock.
Matlab
- In Matlab/rbnb_getjpg.m and Matlab/rbnb_putjpg.m: Delete temp files after using them.
PlugIns
- Corrected heading calculation in TrackDataPlugIn.
- Fix bug in TrackDataPlugIn dealaing with the display of "pseudo-alt" KML channels.
- Bound heading angle in TrackKMLPlugIn.
- Moved calculateHeading() to TrackDataPlugIn.
WebDAVServlet
- Modified WebDAVServlet to enable appending to detached sources.
- Corrected start time issue in WebDAV interface when only duration specified on PUT.
HttpMonitor
- Removed HttpMonitor dependency on sun.misc.Base64*
- Added check to HttpMonitor: if LastModified field is present, only update if changed.
rbnbPlot
- Minor updates to RBNB Plot.
- rbnbPlot now uses MIME type to identify JPEGs for display.
V3.1B2 to V3.1B3 Changes
V3.1B3 released 03/04/2008
General
- On 03/01/08, the RBNB Subversion repository was switched from NEESforge to Google Code.
- Added "source" and "target" flags to "javac" tasks in build.xml
files where they were not being set. In general, "source" and
"target" are set to the value of "rbnb.javaver" (declared in
definitions.xml), which is currently "1.4". Note that the RBNB
server overrides this flag and sets Java 1.3 as the target and source
version.
- In
"Source/Scripts/OtherUnixScripts/Start_Webserver.sh" and
"Source/Scripts/OtherUnixScripts/Stop_Webserver.sh", change shell to
bash on other unix, seems to fix the bug on Solaris.
Server
- Added support for loading archives via absolute pathnames. Modified "Source/DataTurbine/com/rbnb/api/RBO.java"
SAPI
- Updated
ChannelMap javadoc to specify that PutData calls do not copy the input
arrays. Modified "Source/DataTurbine/com/rbnb/sapi/ChannelMap.java"
Matlab
- Added
new utilities to support RBNB-JPG processing in Matlab:
"Source/Matlab/rbnb_putjpg.m" and "Source/Matlab/rbnb_getjpg.m"
PlugIns
- Add support for 3D icon orientation in TrackDataPlugIn and TrackKMLPlugIn.
- Added
timeout argument to PluginTemplate.argHelper.
Modified "Source/DataTurbine/com/rbnb/plugins/PlugInTemplate.java"
WebCache
- WebCache/CacheInterface:
changed rbnbPutData to ByteArray vs INT8 type for compatability with
subsequent fetches from cache by rbnbPlot and RDV etc. Modified
"Source/Applications/WebCache/com/rbnb/webCache/CacheInterface.java"
V3.1B1 to V3.1B2 Changes
V3.1B2 released 01/11/2008
General
- Open source code is hosted on NEESforge website.
- Removed obfuscation (no longer needed now that RBNB is open source); remove ProGuard files from Third_Party directory.
- Add Doxygen documentation capability (add Source/Doxyfile; tweak
the Ant "programmer-documentation" task; add Doxygen adapter class for
Ant).
- Tweak regression test script to support COMSOL: take out spaces
between function name and open parenthesis (change in
Source/Matlab/testrbnb.m).
- Added ActiveX packager and installation scripts and LabView example.
Server
- Added interpreter header to Source/DataTurbine/jsharp_code_prep_script
- User info is now replaced on successive registrations
- Fixed registration bug in com.rbnb.api.
- Shortcuts now appear as SERVER nodes in ChannelTree. Updated Sink.RegistrationRequest documentation.
- Change TCP.java to support computers with multiple interfaces.
- Fixed bug for trimByTime mode. _Metrics channels would not be
reliably checked for trimming the ring buffer. This could result in
long term memory growth with risk of running JVM out of memory (change
in Source/DataTurbine/com/rbnb/api/StorageManager.java).
- SAPI: Minor improvements to ChannelMap.
TimeDrive
- Tweak GUI to add additional “Interval” entries for finer grain control of track display.
- Add fractional time step and interval values to TimeDrive web
interface for finer grained control; make supporting changes in the
TimeDrive server.
PlugIns
- RoutingPlugin: Fix exception-handling bug; add debug flag (-d).
- A plug-in to compute the time derivative of a channel was added to the PlugIn area.
- Improved performance of PlugInTemplate.stop().
- Added com.rbnb.plugins.PlugInRecorder, which Subscribes to a PlugIn and archives the output.
- Minor improvements to PlugInTemplate.
UDPCaster
- Add new command line arguments: autostart ("-x") and stream from oldest ("-o").
- Supports multiple recipients ("-r" flag takes a comma-delimited list of recipients).
rbnbPlot
- Added com.rbnb.fie (File Import/Export) package (added to Plot area
because that is where we are initially using it, and also to keep the
Server code Java 1.1.4 compliant). JMatStruct, an exporter for .MAT
files, is the most significant class in this package.
- Add MATLAB (".MAT") export support using JMatStruct. The .MAT file is created in the current directory.
- Plot has support to change the font size through a JVM system parameter.
- Fixed export-to-DT trimByTime mode problem (ExportToDT.java).
- Added short sleep to help rbnbPlot channel list refresh on new connection (tweak in RBNBPlotMain.java).
- Change default video playback rate.
- Slowed down startup playback rate for zero-duration data (e.g. video).
- Fixed bug where zero-duration image plots would hang.
- Spaces in channel names replaced with underscores for .mat file export.
V3.0 to V3.1B1 Changes
Third_Party directory has been pulled out of Source directory; build
files have been adjusted as appropriate. This is consistant with the
folder structure at NEESforge and makes sense since the content of
Third_Party isn't part of the RBNB open source.
rbnbServer
- Some debug features of Locks and Doors are conditional, using the
system property com.rbnb.api.Door.debug. Set this to "true" to
allow debug. This reduces memory consumption in some cases by 30-40%.
RBNB V3.0 Release Notes
This release of the RBNB system contains the following changes:
V3.0 Production
Code is frozen as a stable production release.
Both "push" and "pull" mirrors now have reconnect logic
Added limited support for displaying 3D icons (".dae" models) to
TrackKMLPlugIn. An "Icon Scale" combo box has been added to the GUI
which allows the user to specify the scale for both 2D and 3D icons.
V3.0B3 to V3.0B4 Changes
RBNBPlot's font size can be specified with the java debug flag -Dplot.fontsize=N
"Pull" mirrors will automatically reconnect if the network link
goes down. This is a beta test change, with "push" mirrors to follow in
a future release.
Parameters targeted to specific plugins can now be specified via both the URL "munge" interface and the API.
The URL syntax is "?pio=plug-in-name,key1=value1,...,keyn=valuen".
The API interface is ChannelMap.AddPlugInOption()
V3.0B2 to V3.0B3 Changes
Fixed bug in ResamplePlugin so it now handles multiple channels per request
V3.0B1 to V3.0B2 Changes
rbnbServer
- Plugins now properly handle "Monitor" mode by passing
through source frames consistent with how a direct (non-plugin)
connection works
- Mirrors forward registration metadata (also known as "User Info").
- Subscribe
to oldest and Mirror from oldest bug fix in the case where the
Subscription/Mirror is set up before data is in the Source and the
Source has registered channels.
- Tweeks to server thread-locking logic should make it less likely for certain rare but annoying thread-lockup problems to happen
Developer API
- When a user registers channels in a Source, it is now
allowed to have a mix of channels with and without registration
metadata (also known as "User Info").
V2.6 to V3.0B1 Changes
V3.0B1 is the first beta release of V3 RBNB. It is identical to
V2.6 except that it is being released under the Apache 2.0 Open Source
license. See the
revised EULA for license details, and the new "Source" link to download
source code.
Future releases will provide build/source documentation as available.
V2.6B6 to V2.6 Changes
V2.6 is a stable production release.
rbnbServer
- Various archive-recovery tweeks. Fire-walled an obscure infinite
recovery loop problem; continued archive-robustness logic TBD.
Plugins
- Resample plugin
added that will downsample and/or limit the amount of numerical
data fetched through it, similar to ThumbNail for images.
V2.6B5 to V2.6B6 Changes
rbnbServer
- Changed the archive-append logic. Now, when a source opens an
archive for append and changes the size (number of frames) of the
archive, no data is trimmed. Rather, any change to the archive size
applies to new filesets as they are written, such that the new size
will be achieved after a complete set of data at the new size is
written. This change is to prevent the inadvertent loss of previously
recorded data.
- Backed out the one-deep default registration request logic change
of V2.6B5.
This caused problems where plugins and routes could be flooded with
repeated registration requests, e.g. from the WebDAV interface.
- Various archive-recovery tweeks. Fire-walled an obscure infinite
recovery loop problem; continued archive-robustness logic TBD.
TrackKMLPlugIn
- Add support for munge-settable display parameter options:
KmlLabel, KmlSort, KmlIcon, KmlColor, KmlCurtain
- In the configuration file, add support for custom Type and
Classification color mapping
V2.6B4 to V2.6B5 Changes
rbnbServer
- Fixed a bug where a source would detach, then reconnect and write
more data, would fail to properly register the new data, thus making it
unavailable upon subsequent reloading the archive.
- Improved archive recovery logic to use much less memory, enabling
the recovery of very large archives. To force the recovery of an
archive at any level, remove the associated "seal.rbn" files from the
archive directory tree. Also extended the range of potential types of
archive corruption that can be handled by the recovery process.
- Changed default behavior to (once again) use multiple framesets
per cache. Using a small number of framesets per cache improved
playback performance, but could hurt source performance for large
numbers (e.g. 500) channels. Symptoms would be a surge of CPU use on
each cache-flush. The old behavior can still be invoked by using the
-Dnumframesets=N (N>0).
PlugIns
- Enhanced server-side plugin handler to automatically convert
streaming (monitor, subscribe) modes into a sequence of requests. This
enables streaming through most existing plugins without modification.
- PlugInTemplate class added to streamline plugin development.
- ThumbNail and PNGPlugIns converted to use PlugInTemplate.
Developer API
- The RequestRegistration() method with no arguments now defaults
to a "*/..." request. That is, default registration requests will go
one-deep into PlugIns and Routing connections to better enable
selection of channels from applications with pull-down menus etc.
TimeDrive
- Add multi-user support, where each user has control of their own
time munge parameters. Two multi-user modes: based on IP address (the
default) and using HTTP Basic Authorization (user is prompted for a
username/password).
HttpForward servlet
- A new servlet delivered with Tomcat. Allows a client which can
connect to Tomcat (standard port 80 access) to make requests of servers
running at ports to which they may not have access. Client connects to
Tomcat and then HttpForward servlet passes this request on as part of a
user-defined URL. For example, this servlet can be used to provide
TimeDrive support to clients who only have port 80 access to Tomcat.
TrackKMLPlugIn and TrackDataPlugIn
- KMLTrackPlugIn has been broken up into these two modular
components. Together, these PlugIns convert a series of RBNB alt, lat,
lon data points into a KML document viewable with Google Earth.
TrackDataPlugIn handles the low-level RBNB data requests;
TrackKMLPlugIn formats this data into a KML.
- Changes in TrackDataPlugIn
- Add "append=<chan>" munge to request data on an extra
channel (used as pseudo-alt channel in TrackKMLPlugIn)
- Add "tactical=1" munge to obtain a full duration worth of data
on the ancillary channels (including Speed and Heading)
- Changes in TrackKMLPlugIn
- If an extra channel (an "append" channel) comes back from
TrackDataPlugIn, display it as a pseudo-alt track.
V2.6B3 to V2.6B4 Changes
rbnbServer
- As part of cache/archive optimization, changed logic to write
entire cache to archive (vs in parts). This means you want a cache that
is no larger than needed for efficient disk-block write efficiency,
e.g. 100 frames.
- Workaround for archive writing inconsistancy on some
multiprocessor
machines added to FrameSet.writeToArchive()
- Incoming single-channel frames are recast in a more efficient
format, which reduces archive sizes and greatly improves read
performance.
- Plain userinfo registration data is updated to xml format.
- Add "-H" command line flag to specify the archive home directory.
rbnbAdmin
- Add "-u" command line flag to specify username.
rbnbPlayer
- In single-point mode, when Player is sleeping (for rate/pacing
control), the time on the Position slider is updated - this provides
feedback to the user that Player isn't "stuck", rather it is just
pacing its output. Note, however, that the location of the
Position slider itself is not updated - just the time label is updated.
V2.6B1 to V2.6B3 Changes
WebTurbine
Rebuilt code to run with JRE (versus full JDK required with previous
release).
rbnbServer
A "frameset" is a collection of cache frames which are written to the
archive. The rbnbServer code has been modified to set the default
number of framesets to 2. For example, if a Source has 100 cache
frames, then by default this cache is broken up into 2 framesets of 50
frames each. If this Source has an archive, then the archive will be
appended each time 50 new frames arrives in the Source.
A new RBNB Server command line option has been added for setting the
number of framesets in each cache, "-Dnumframesets=<positive
integer>". For example, if a Source is created which has 1000 cache
frames, and if the RBNB Server was started with the command line option
"-Dnumframesets=5", then this Source's cache is broken up into 5
framesets of 200 frames each. If this Source has an archive, then the
archive will be appended each time 200 new frames arrives in the
Source.
If the user specifies "-Dnumframesets=0" on the RBNB Server command
line, this is a special case which tells the Server to set the number
of framesets for each Source equal to the square root of the number of
cache frames in the Source. This is equivalent to the legacy method of
setting the number of framesets (before the Server change to set the
default number of framesets to 2, see above for details). For example,
if the RBNB Server command line included "-Dnumframesets=0" and a
Source is created which has 100 cache frames, then the number of
framesets will be set to 10 (since the square root of 100 is 10), and
each frameset will contain 10 cache frames.
V2.5 to V2.6B1 Changes
V2.6B1 is a beta release
WebTurbine
Upgraded to Jakarta Tomcat 5 Web Server. This change entails a
re-implemented RBNB Web servlet which should be more efficient.
As part of this change, the "rbnbUser" web interface has been
deprecated and replaced by "RBNB". The "rbnbNet" interface is no
longer available. All URL references to an RBNB are relative to
the connected server via the "RBNB" servlet, as in:
http://localhost/RBNB
WebTurbine now recognizes If-Modified-Since headers and only returns
data if it
has changed. This greatly improves the efficiency of the WebTurbine for
polling
applications.
rbnbServer
Fixed a bug if Source archive length was less than cache size, no
archive would be created.
Fixed a bug if a Source did a Detach() too quickly after the last
Flush, a corrupted ring buffer would prevent subsequent Sinks from
Fetching data.
Fixed a bug where the Server would orphan a thread each time a client
made a Registration request. This would eventually cause the Server to
grow in memory and thread resource use.
Routing PlugIn
The Robust Routing Plugin now has a "Routing Console" web interface to
launch/stop and review routing plugin status.
If a _loopback RoutingPlugIn is running at the source, UDP is used for
monitoring
instead of the usual SAPI connection.
rbnbAVCP
Bug fix for 16-bit audio; performance tweaks.
ThumbNail PlugIn
If max number of images has been set to 1, ThumbNail now correctly
limits max number of images to 1.
Added "-n" option for setting PlugIn name.
KMLTrackPlugIn
KMLTrackPlugIn is a new PlugIn being distributed with RBNB. This
PlugIn converts a series of RBNB alt, lat, lon
data points into a KML document viewable with Google Earth.
TimeDrive
TimeDrive is a new application being distributed with RBNB.
TimeDrive is a Web proxy server which adds a time munge
to WebTurbine requests. A Web interface is provided with VCR-like
controls for setting TimeDrive's current time.
V2.5B7 to V2.5 Changes
V2.5 is a stable production release
rbnbPlot
A problem that under certain laggy conditions could lock up channel
selection has been fixed.
The plot label units-multiplier (e.g. "kilo") that was temporarily lost
is now back.
rbnbAdmin
Admin now recognizes and displays PlugIn channels (one level deep).
RoutingPlugIn
The Robust Routing PlugIn has been updated to better support streaming
data connections.
There are some server mods specific to plugins that support this.
WebTurbine
The default archive-mode via the WeDAV (file) interface is once again
"append" (vs "create").
V2.5B6 to V2.5B7 Changes
V2.5B7 is an updated beta release.
rbnbPlot
The plot display boxes are under user-controlled layout manager,
allowing individual window components to be positioned and sized
independently.
V2.5B5 to V2.5B6 Changes
V2.5B6 is an updated beta release.
rbnbPlayer
A TCP output option has been added to Player. The user specifies
a port number on which Player will open a server socket to listen for
TCP client connections. RBNB data is sent to each connected TCP
client. Default display mode and duration have been modified.
RBNB Server
Due to numerical round-off in the RBNB Server, certain problems have
been identified with time-based subscriptions where the Source has a
multi-point frame defined by a single start time and non-zero duration
(a time is not set for each point in the frame). This problem has been
fixed (by adding a small roundoff correction) for some of the cases
where the problem occurred.
rbnbPlot
Text channels (those with mime type text/plain, or ending in ".txt" or
".text")
will be displayed in a scrolling text box, synchronously with other
data.
Web Interface
An option to the WebDAV interface for converting fetched data to text
("&dt=string") has been added.
V2.5B4 to V2.5B5 Changes
V2.5B5 is an updated beta release.
RBNB Server
We found and fixed some subtle bugs in streaming modes (monitor and
subscribe).
The bugs occured when a sink streams multiple channels from a source
with multiple ring buffers
(e.g when a source puts different channels in different frames at
different rates).
The following bugs were fixed:
Monitor mode could get duplicate frames
Subscribe mode could block forever
waiting to start
Streaming from oldest or newest could
skip the first frame
ChannelTree
The ChannelTree API structure now has time info (start & duration)
consistent with the ChannelMap object.
rbnbPlot
- rbnbPlot is updated to the Java Swing interface,
including a much nicer "tree view" channel selection window.
- rbnbPlot recognizes source metadata and perform associated linear
scaling and plot annotation. To use it, a source provides
metadata of the
form:
- rbnbPlot can "zoom" via cursor control to selected portions of
stripchart data.
- rbnbPlot allows type-in start and duration time fields.
rbnbAVCP
rbnbAVCP now supports full command-line option control. It also uses
the new registration userInfo
methods for describing its content.
WebTurbine
You can now fetch channel meta-data ("userInfo") via the WebDAV option
'fetch=info'.
V2.5B3 to V2.5B4 Changes
V2.5B4 is an updated beta release.
rbnbPlot
A new capability to export selected data to the locally connected
DataTurbine
is implemented.
Registration metadata
New API methods putUserInfo and getUserInfo enable per-channel metadata
to be stored and retrieved in the registration channel map of a data
source.
Server side automatic timestamps
Server timestamps were broken and are now fixed.
V2.5B2 to V2.5B3 Changes
V2.5B3 is an updated beta release.
Sink constructor deprecation
The Sink constructor taking arguments (cache,mode,archive) has been
deprecated,
and now calls Sink() instead. The server does not support setting cache
and archive for Sinks.
rbnbAVCP
The rbnbAVCP video capture and display application has been updated and
improved.
rbnbPlayer
The rbnbPlayer application has been updated and several bug fixed in
the
beta version. Specifically, single-point playback now works
properly.
rbnbAdmin
The rbnbAdmin application now has an option to load archives from
disconnected
sources.
Authentication (Beta)
Authentication via Kerberos or Grid GSI security is supported.
V2.5B to V2.5B2 Changes
V2.5B2 is an updated beta release.
Applet Security
The RBNB API has been updated to allow clients (sources and sinks) to
run
as applets using default applet security rules (e.g. connecting back to
the same server from which the applet was loaded). Previously,
there
were a number of Java System.getProperty() calls that would throw
uncaught
exceptions if run as an applet. These are now caught and defaults
used for the case of applets.
Audio/Video Capture and Display
Updated audio/video capture and display application (rbnbAVCP) is
included
in this release. This is effectively an RBNB "videophone" that
has
built-in record and playback capabilities.
rbnbPlayer (Beta)
The V1 "rbnbPlayer" application has been updated and ported to RBNB
V2.
This application "plays" data from one source and outputs it to
another,
time-slewing it using VCR-like controls. Sink clients can
subscribe
to the player output channels and thereby by remote-controlled. (This
release of player is Beta-only. There are known issues and some
debug
print-outs).
Improved Archive Recovery Logic
The archive recovery logic was improved so that certain types of
previously
unrecoverable corrupt archives are now recoverable.
ThumbNail Plugin
A new "thumbnail" plugin is available that will downsample and/or
reduce
JPEG image size. This enables remote access to large volumes of
video
data over limited network bandwidth links.
V2.4.4 to V2.5B Changes
V2.5B is a beta release of the RBNB system. It includes a number
of new and enhanced applications, and optionally supports a .NET
compatable interface.
PlugIns
New and enhanced plugins are available:
- SignaturePlugIn - signs and checks signatures to authenticate
data
sources
- FileDrop - picks up specified channels and drops them to local
files
- RoutingPlugIn - robust RBNB-routing using plugins
- FolderPlugIn - updated to automatically update file-list upon
data
requests
- rbnbSource - fixed logic that would "detach" instead of close
connections
See the on-line Help documentation for details about each of these
plugins.
rbnbPlot
The rbnbPlot stripchart application now supports video images.
Channels
that end in ".jpg" are displayed as a "filmstrip" of video images.
Clicking
on the video window brings up options to set the image number and size.
Java V1.1 Compatability
The low-level server and API code modifications have continued in
various
places to retain (old) Java V1.1.4 compatability, in order to support
the
.NET J# compiler. Client code can be developed using the latest
(e.g.
Java 1.4) features. Among the changes made:
- When using the Server command-line "-O" option to load an options
file,
the URL of the specified file can no longer use HTTPS.
- When using the Server command-line "-A" option to load a
security/address
authorization file, the URL of the specified file can no longer use
HTTPS.
V2.4.3 to V2.4.4 Changes
Registration Metadata Bug Fix
A bug was fixed that could cause the "user" registration data
(metadata)
to be unreliably updated and retrieved.
Router Shutdown Robustness
Modified the synchronization of router shutdown, to increase tolerance
for network lapses.
Java V1.1 Compatability
The low-level server and API code was modified in several places to
retain
(old) Java V1.1.4 compatability, in order to support the .NET J#
compiler.
Client code can be developed using the latest (e.g. Java 1.4)
features.
This work is in progress.
Another shot at rbnbjcap
The rbnbjcap/jview video applications in the previous release (still)
did
not have all the required class files. This build hopefully fixes that.
V2.4.2 to V2.4.3 Changes
Subscription by Wildcards
It is now possible to specify a "*" wildcard for subscriptions by
time.
Subscriptions by frame still do not support wildcards.
Zero-Duration Request Logic Enhanced
Prior to this release, a request for zero-duration at an absolute time
would fetch data at-or-before the specified time. This is handy
so
that sources can put data at zero-duration, and a request for
zero-duration
will find the "then-newest" data at any time.
With this release, the enhanced at-or-before logic is extended to
include
the time-relative requests ("newest" and "oldest"). Thus,
relative
and absolute requests behave consistently in this respect.
Build Includes rbnbjview and rbnbjcap Applications
V2.4.x had inadvertently omitted including the video client
applications
in the build. They are now back.
Minor API Documentation
Updates
The javadoc has been tweeked for some methods.
Change in Low Level Communication
A change was made in the low level client/server communication to allow
better cross-Java-version compatability. (Transmission of serialized
Java
objects was eliminated). Specifically, the .NET J# compiler will soon
be
supported.
This change should be transparent to all users, and
cross-RBNB-version
compatability is maintained.
V2.4.1 to V2.4.2 Changes
Multiple Ring Buffer Request Problem
A bug in the server caused a string index out of range error when
requesting
a short channel name (<3 characters) from a source with multiple
ring
buffers (channels sent in separate groups).
V2.4 to V2.4.1 Changes
Delete Channels from Registration
An oversight in the delete channels capability would result in channels
not being fully deleted if they were explicitly registered. This
effected
the WebDAV system, which uses explicit registration for empty files.
Moving,
renaming, and deleting files now works properly.
Updated Documentation
Documentation has been updated to reflect the changes to the layout and
all of the documentation is now included as part of the WebTurbine
system.
V2.3.2 to V2.4 Changes
New Installation System
The RBNB DataTurbine and WebTurbine system is now delivered as an
IzPack
installation rather than an InstallAnywhere system. The former is a
freely
distributable package. It lacks the JRE installation capability used on
Windows systems, but is otherwise similar to the latter.
New Installation Layout
The installation layout has changed somewhat, mostly in the WebTurbine
area where we now use .war files to package the RBNB extensions.
Renamed
Package The former COM.Creare.Utility package has been
renamed
to
com.rbnb.utility for consistency. This package contains some
useful, general-purpose utility code.
V2.3.1 to V2.3.2 Changes
COM.Creare.Utility Package renamed to com.rbnb.utility
The COM.Creare.Utility package has been renamed to com.rbnb.utility for
consistency with Java standards.
Restructured Installation
The build and installation process has been changed, resulting in a
somewhat
different structure to the resulting delivery. The major, noticable
change
is that the WebTurbine files have been packaged in .war files.
V2.3 to V2.3.1 Changes
Routing Reconnect Loop
If an error (not a network problem or server shutdown) caused a routing
connection to be lost, it was possible for the two servers to get into
an infinite loop of lose routing/re-establish routing. This has been
fixed.
Number of Threads
Some types of requests, especially going across routing, had the
potential
of stranding threads due to a notification problem. This has been
fixed.
JNDI_Sink Names
The names of the JNDI_Sinks (used by the WebDAV interface) have been
changed
to reflect the Web application that creates them.
JNDI_Sink Pool
The number of JNDI_Sinks (used by the WebDAV interface) held in a pool
for future reuse has been reduced from 16 to 4. This may cause some
degradation
in responsiveness, but improves overall resource use.
Stranded Web Turbine JNDI_Sinks
The number of JNDI_Sinks (used by the WebDAV interface) could
potentially
grow indefinitely if problems occured on the server side. The
JNDI_Sinks
now have a one minute timeout on any request and automatically shutdown
if they do not get a response before the timeout expires.
Linux IBM Java Requirement
The Linux startup scripts used to state that an IBM JVM was required
for
proper operation. This is no longer true.
V2.2.2 to V2.3 Changes
Client Address Access Permissions
The authorization security file now allows specific permissions (read,
write, etc.) to be permitted rather than just full access
allowed/denied.
Unconnected Shortcuts
If a client asked for a registration map from a server with a shortcut
that was in the process of being connected, the server would wait for
the
shortcut before returning the registration map. The server now skips
over
such shortcuts.
Connection Lockups
A timeout has been added to the code that makes TCP connections to
remote
servers (both in the client API and in the server code for setting up
routing).
This ensures that failures in the low-level TCP socket connection logic
due not result in client or server level lockups.
Duration Zero Request Problem
A duration zero request for data with zero duration sometimes returned
the wrong data. This would happen when the request time fell between
two
framesets. Instead of returning the last frame in the frameset
preceededing
the request, the code was returning the first frame in that frameset.
V2.2.1 to V2.2.2 Changes
Deadlocks
Under load, especially at startup, there was the potential for deadlock
situations in the server. As a result, sources and sinks would produce
informational messages about being blocked. These have been fixed.
Frame-based Streaming from a Source with an Archive
Streaming from a source with an archive using frame-based streaming has
been problematic. While the use of reframing (see archive
subscription problem), it is at the price of increased storage. As
of V2.2.2, the server will terminate a frame-based stream that attempts
to get data out of an archive (either by requesting oldest or due to
the
fact that the stream is unable to keep up and falls out of the cache).
Performance when streaming from the cache when there is an archive has
been improved as well.
Mirror Shutdowns
If the RBO side of a mirror was shut down, the mirror might not
properly
clean up. This could result in memory growth, eventually causing out of
memory problems.
V2.2 to V2.2.1 Changes
Storage/Retrieval of rbnbPlot Configurations
The rbnbPlot application now allows the user to store and retrieve
configuration
information.
Monitor Mode Timing Bug
A timing bug in Monitor retrieval mode caused premature termination of
the stream of data being sent from the server.
V2.2B6a to V2.2 Changes
Duplicate Times in Time-Based Subscriptions
If the input stream of a time-based subscription contains points with
identical
times, the subscription could go into a loop retrieving those two
points
until they disappear from the ring buffer.
Per-Channel Times in Time-Based Subscriptions
Per-channel (as opposed to per-frame - i.e., shared by all channels
within
a frame) times would not be properly handled by time-based
subscriptions
for channels other than the first.
RBNB Window Minimized
On Windows machines, the RBNB window is now started in a minimized
state.
Failed Data Connections When Lots of Clients Simultaneously Connect
Due to a lack of synchronization, the server could fail to properly
link
a data connection to its control connection when lots of clients
simultaneously
connect to the server. The result would be that the client would fail
to
connect and the server would eventually time out the client handler.
Shutting Down a Source During Data Retrieval
Under certain circumstances, it was possible for the RBO handling a
source
client to go through its shutdown process while a NBO was in the middle
of retrieving data. This would result in the NBO getting locked up
waiting
to get data that had been deleted. This has been fixed so that the NBO
gets no data from the source.
Improperly Aborted Remote Connections
If the local side of a request for remote data terminated while that
request
was being set up, a connection between the local and remote servers
could
be stranded. This has been fixed.
Stranded Remote Monitor/Subscribe Connections
If the local side of a monitor or subscribe request terminated, it
could
leave an active stranded connection between the two servers. The
connection
used up resources trying to deliver responses to the request to a
non-existent
client. The connection is now terminated.
Lockups Due to Routing Failures
A number of changes have been made to ensure that servers detect
(within
a timeout period of a couple of minutes) routes that have failed (or
which
never were fully established).
Failure to Find Routes in Hierarchies of Servers
A bug in the code that determined where next to deliver a message that
is going up a chain of parents and children caused routing problems.
Delivery of Routed Messages to Terminated Clients
If the local client of a request made to a routed server was closed
before
the response to that request could be delivered, the response would be
sent back to the remote server. The result was that the route between
the
two servers would lock up because all of the connections were occupied
with trying to deliver the message. The local server now reports that
it
failed to find the local client, which forces the remote handler to
shut
down as well.
Properly Handle Client Shutdowns During Initialization
If a client application shuts down while the connection between it and
the server is being established, the server might not properly clean up
its side of the failed connection. The result was that there was a
client
handler in the server that could not be terminated. This has been
fixed.
Properly Handle Exceptions During Routing Initialization
If an exception occured when a route is being established between a
child
and a parent server, the parent server might not properly clean up its
side of the failed route. The result was that the parent server would
report
a route where there was none. Attempts to use it would lock up.
Attempts
to terminate it would fail. This has been fixed.
Improved Error Message Reporting
Some exception and error messages were being quietly swallowed by the
RBNB
server. These messages now appear in the log and on the console.
Delivering Error Messages via Failed Connections
The server was attempting to deliver an error message reporting a
failed
connection via that connection. The result was that the message would
never
be delivered and the client handler in the server would never properly
exit. The server no longer tries to deliver such messages.
V2.2B6 to V2.2B6a Changes
Fixed Bug in Server-Side Data Retrieval
A timing problem could cause the server side for a sink to lock up if
an
RBO from which it was retrieving data terminated during that retrieval.
Fixed Bug in Server-Side PlugIn Shutdown
A bug in the server-side shutdown code for plugins would cause a
stranded
plugin object in the server. The client-side would properly exit.
V2.2B5 to V2.2B6 Changes
Extended Start Requests
When requesting data, it is now possible to ask that the server
retrieve
an additional data point before the specified start time of the request
if there is no data point exactly at that time.
Clearing RBO Caches
The new ClearCache method can been called to clear out the
contents
of an RBO's cache. The data is flushed to the archive and then removed
from the server's memory, reducing the RBO's footprint.
Asynchronous Log Display
The display of log messages to the console is now asynchronous to the
rest
of the server. If the console output be blocked for some reason, the
server
still continues to operate normally, although some messages may not be
displayed (they are still logged if logging is on).
Fixed Metrics History
Metrics data for detached connections was being lost.
Reduced Memory Usage for "Live" Archives
When data is removed from the cache, it is supposed to be removed from
memory. With an archvie, some of this memory was not being released
properly.
Improved Handling of Data Retrieval Errors within the Server
The server now properly reports that no data is available from RBOs
that
close during the data retrieval process.
Improved Error Handling during Connection Process
If a client disconnected during the connection process, it was possible
for it to leave its server side handler in a blocked state. The server
side handler now times out and shuts down.
Improved rbnbAdmin Exit Handling
The rbnbAdmin application now properly exits even if its connection to
the RBNB server has been locked up due to problems on the server side.
Enhanced ProxyPlugIn
The proxy plugin has been enhanced to provide a number of new features.
Echo Message PlugIn
A new plugin has been added that echoes messages it receives to the
console.
It is intended as an example of how to write a plugin.
V2.2B4 to V2.2B5 Changes
Absolute Requests for Duration of Zero (0)
Absolute (specific time) requests with a duration of zero (0) now
retrieve
the first data point at or before the time specified. Previous versions
would only retrieve a data point if there was one exactly at the
specified
time. This mode can be turned off using the new -C V2.1
flag.
Subscribe by Time
A new capability has been added that allows a sink to specify the
nominal
duration to retrieve on each fetch call when subscribing (not
monitoring).
This allows the sink to get data in chunks that are not constrained by
the source-specified frame duration (except in so far as the latter is
all the data that is available).
This capability addresses the archive
subscription
problem described in the release notes for V2.2B4 as the reframing
does not effect times, just frames.
Fixed Registration Problem
A problem in the code that computes the registration time information
for
a source would fail to consistently update the limits for the second
and
subsequent channel groups. This would result in requests for "newest"
failing
to properly get the latest data.
Fixed Backwards Going Time Problem in Appending to Archives
A bug in the code that determines the time of the newest data in an
archive
loaded for append resulted in the code improperly allowing time to back
up.
Fixed Further Deadlock Problems
A variety of deadlock or runaway CPU problems that effect multiple,
simultaneous
sinks retrieving data from a single source have been fixed, improving
on
the work done in V2.2B4.
Fixed the Frame Indexing in Append Mode
The frame index for assigned to new frames being added to an existing
archive
(append mode) was not set to be after the last frame in the archive.
The
result is that such neither monitor nor subscribe (frame-based) would
work
properly on such archives. This has been fixed.
Bug in Archiving Data with a Zero (0) Duration and Multiple Points
per
Time
Archives containing data where a single time and zero (0) duration
spans
multiple points did not work correctly in earlier versions. The
time
information for the second and subsequent points would be lost and a
time
of 0 would be assigned, resulting in unusable archives.
This is an uncommon format for data. It requires that the
source
specify a time interval with a duration of zero (0) and then provide a
data array containing more than one point. For ecample, the
following
Java code would produce the problem:
cmap.PutTime(1.,0.);
// Set a time of 1 with a duration of 0.
float[] data = { 1.F, 2.F, 3.F, 4.F }; // Create a
data array containing the values 1 to 4.
cmap.PutDataAsFloat32(0,data);
// Add that data to the channel.
V2.2B3 to V2.2B4 Changes
The Cache and Archive Sizes are Changed when Reconnecting to an Open
Archive
When using the reconnect capability (close an archive with keep cache
and
then reopen for append), the cache and archive sizes are now changed to
match those requested by the reconnecting client, rather than silently
using the internal values.
Known Issues with Streaming (Frame-based) from Archives
There are a number of problems when streaming (subscribing/monitoring)
datastored in archives. The reframing of archives causes the loss of
information
needed to be able to properly stream. These problems can be alleviated
by turning off reframing at the cost of some performance.
Note that reframing is on or off for the server as a whole and must
be set when writing the archives (it isn't required for reading them
back).
Reframing can be turned off by defining a Java system property
called
"noreframe" (the value is irrelevant so long as the property is
defined).
The property can be defined when the Java Virtual Machine (JVM) is
launched
by using the following command:
prompt> java -Dnoreframe=true
For those using the Windows RBNB icon to launch the system, you need
to define CATALINA_OPTS as "-Dnoreframe=true".
For those using the Unix shell scripts, add "-Dnoreframe=true" to
the
definition of CATALINA_OPTS in the ${RBNBHOME}/bin/Start_Webserver.sh
script.
Streaming from Oldest Limitation
When streaming from oldest, it was possible for the code to miss frames
when it reached the end of the available data and started waiting for
new
data to arrive. For now, the code has been modified so that it won't
miss
data, but it may fail to properly move forward when looking at data in
a source containing multiple ring buffers.
Fixed a Deadlock Problem with Archives
Under some circumstances, it was possible to cause a deadlock when
using
archives. If the maximum number of open filesets was reached due to
sources
(either because of the number of sources or the number of ring buffers
within one or more of sources), then the code could get into an
infinite
blocking state for some of the ring buffers. If a sink subsequently
attempted
to read from the source, it would eventually start reporting timeouts.
This bug has been fixed.
Fixed additional Deadlock Problems
Additional problems with deadlock situations between a source and a
sink,
where the sink could end up blocked waiting for the source and
vice-versa,
have been fixed.
Fixed Error in Versioning Feature Support Logic
A timing error in the code that is supposed to check to see if a
feature
is supported could unexpectedly cause the code to temporarily think a
feature
was not supported during startup. In combination with the load
all
archives (-F) flag on the server, this error would result in some
archives
failing to load without any indication of a problem.
Fixed a Problem with Loading All Archives
An additional problem with loading archives was discovered when the
number
of archives to be loaded is large. Some archives might fail to
load
because of a limit on the number of simultaneous new connections to the
server. The code now retries the attempt to load the archive until it
either
loads, fails for a reason other than a rejected connection, or the
server
exits.
Improved Automatic Re-establish Routing Logic
Under some circumstances, there was an opportunity for a deadlock
situation
in the code that re-establishes a routing connection between a child
and
parent server. This has been fixed.
V2.2B2 to V2.2B3 Changes
Fixed Data Retrieval Bug Caused by Deleting a Channel
When attempting to retrieve data from an archive that had a channel
deleted
out of it, the V2.2B2 code might either fail to find valid data or
might
get an exception. This has been fixed.
Fixed Source Connection Shutdown Code
The code that was supposed to close down a source with an archive had
some
problems. In particular, if the source application disconnected, but
told
the server to keep the cache and archive loaded, then the only way to
close
the server side properly was to re-connect to the source (using
"append"
mode) and then do a disconnect with keep cache set false.
Using rbnbAdmin to attempt to terminate the server side of the
connection
would not have any effect. Shutting down the server would leave the
archive
in a bad state.
These problems have been fixed in this release.
Improved Archive Recovery
A number of improvements have been made to the archive recovery code to
allow it to recover from a broader range of damaged archives. Further
work
in this area is planned for the next release.
Improved Simultaneous Access to Archives
Improvements to the server's handling of limited resources when
multiple
sources and sinks simultaneously access archives have been made. These
reduce problems with thrashing and long-term lockouts.
V2.2B1 to V2.2B2 Changes
Documentation Updated
The documentation has been updated to reflect changes made to the code.
WebTurbine Port Changed to 80
The default port for the WebTurbine has been changed from 8080 to 80.
UNIX
users should note that this change requires that the WebTurbine be
launched
with root privileges. Alternatively, you can change the port as noted
below.
UNIX users or people who are already running a web server on port 80
can
change the port to something else. To do this, dit the file
'server.xml'
found in {installation directory}/jakarta-tomcat-4.1.21/conf directory.
Messaging Host Times Fixed
Times in the V2.2B1 message host were stored in milliseconds since 1970
rather than the standard seconds since 1970. This has been fixed.
V2.1 to V2.2B1 Changes
Deleting Channels
Channels can now be deleted via the Simple API (SAPI) or via the WebDAV
interface. Note: channels created via the WebDAV interface only have
their
contents deleted, not the channel itself. This will be fixed in a
future
release.
Messaging
Messaging allows applications to send messages to unknown recipients
via
a central host. It represents a generalization of the Chat capability.
Messaging is supported through the new com.rbnb.message.Message class
and the messaging host. The latter can be launched from the Web page.
Proxy Source
The proxy source allows programs that support output to a TCP socket to
connect to the RBNB server. When launched from the Web page, the proxy
source requests a description of the data and sets up a server socket.
Connect your application's output to the proxy source and your data
appears
in the RBNB.
V2.0 to V2.1 Changes
Version 2.1 is a functional (as opposed to simply bug fix) revision of
the RBNB system, with the following significant features.
Folders in Registration ChannelMaps
In order to provide support for folders, ChannelMaps returned by
registration
requests now include folders, which are denoted by a trailing slash
(/).
PlugIns and Sources may register folders by including a trailing slash
on the name added to a ChannelMap.
Multiple Ring Buffers per Source
The new V2.1 source handler (RBO) now provides multiple ring buffers
per
source, rather than just a single one as used in previous releases.
This
capability:
- Places unrelated groups of channels into separate ring buffers,
- Protects data for channels that are updated rarely or never at
all from
being overwritten by new data for unrelated, higher-speed channels,
- Changes the monotonically increasing time requirement from a per
source
requirement to a per ring buffer requirement,
- V2.1 automcatically recovers V2.0 archives.
Reconnecting to Archives
The new V2.1 source handler (RBO) now allows source applications to
reconnect
to an archive. This allows a source application to come and go without
removing the data from the server.
When a source application that has an archive disconnects from the
server,
it may leave the archive loaded in the server by setting both the
keepCache
and keepArchive flags. The source application (or another using the
same
password) may subsequently reconnect to the archive by specifying that
it wishes to append to the archive. The source handler in the server
never
shuts down, leaving the archived data available to all sinks even while
the source application is disconnected.
The server now automatically selects keepCache and keepArchive if it
detects a problem with the TCP socket connection between a source
handler
and the source application using an archive. This ensures that data is
not removed from the server if the source application crashes or loses
connectivity (such as when a wireless connection goes out of range).
Improved Error Handling
The server now catches and handles errors (such as out of memory) by
shutting
down the application handler that caught the error. If the application
is a source writing to an archive, the server attempts to save all data
it has received.
Playback from Archives
An obscure bug in the playback code could result in some data to appear
to be missing, although the data is actually in the archive. This bug
has
been fixed.
New Release of the Jakarta-Tomcat Web Server
Packaged with the V2.1 release is version 2.1.21 of the Jakarta Tomcat
Web Server.
WebDAV Support for Multiplexed Data
The WebDAV interface now supports multiplexed data, by automatically
demultiplexing
into a specified number of channels.
Known Issues
ChannelMaps that contain channels with data as well as channels without
cannot be used when making requests. The following fragment is
not
legal:
import com.rbnb.sapi.*;
...
Sink snk = new Sink();
snk.OpenRBNBConnection('localhost:3333','mySink');
ChannelMap cmap = new ChannelMap();
cmap.Add('rbnbSource/c0');
cmap.Add('plugin/c1');
cmap.PutDataAsString(1,'Message to plugin.");
snk.Request(cmap,0.,0.,'newest');
V1 to V2 Changes
Version 2 is a major revision of the RBNB system, with the following
significant
features.
New Licensing Model - Free to Developers and End Users
The new V2 licensing model is designed to promote the widespread
deployment
of RBNB technology:
Free unrestricted developer and end-user license
Negotiated right-to-distribute OEM license
If you want to bundle RBNB with your product or custom solution, please
contact us to discuss the terms of an OEM redistribution agreement.
Creare offers RBNB consulting services, such as:
Development support
Custom features
System integration
Training
Web Integration
The new WebTurbineTM interface enables:
WebDAV compatible
Browser access to RBNB applications and documentation
Run and configure RBNB clients as Web servlets
Browser access (view/save) to RBNB channel data
Build your own custom browser interface to RBNB
Improved Developer API
The new Application Programming Interface (API) employs simple
channelMap
and client objects. There are no more "ring buffer types".
Timestamps are simple double-precision vectors. Efficiency is
retained
or enhanced while greatly reducing complexity.
Although not source-compatible with the V1 API, you will find it
straight-forward
(and refreshingly easy) to port old applications to the new system.
Powerful Application "PlugIns"
Use your browser to configure and deploy a distributed data processing
system. Example PlugIns include:
Chat with other users (rbnbChat)
Publish local disk files as RBNB channels (rbnbFolder)
Buffered routing to minimize network traffic
(rbnbBufferedRoute)
"Virtual Sources" consolidate and sequence remote sources
and
PlugIns
(rbnbVSource)
Browser proxy cache to store and retrieve Web content via
RBNB
(rbnbWebCache)
Make PNG strip charts of numerical vector data
Develop and deploy your own RBNB PlugIns with the new easy to use V2
API.
Peer to Peer Solution
With hierarchical routing of "personal" RBNB servers, the V2 RBNB
provides
a true "Peer to Peer" (P2P) solution. Benefits include data and
processing
"at the client", while being able to locate and publish to "peers" via
an RBNB address that is independent of the IP/DNS address tied to a
physical
location or ISP.
New "Rmap" Core Engine
In the old RBNB V1, data channels were relatively "flat"
structures.
In RBNB V2, Rmaps are hierarchical objects comprised of name, data,
timestamp
and optional (recursive) child Rmaps. For example, channel groups
can share inherited metadata, or use multi-tiered RBNB channels to
directly
reflect the structure of file systems or Web URLs.