What's in the current version of CAVERNsoft?
Version alpha 2.01
New changes in this version:
-
This fixes a bug in version 2.0 where you can only create 1 channel to a remote site. If you have version 2.0 installed you really need to upgrade it as this bug cripples CAVERN severely.
Version alpha 2.0
New changes in this version:
Version alpha 1.7
New changes in this version:
-
Added a meta field inside each key so that you can carry along "type" information.
See CAVERN_irbKey_c.
-
Fixed a trigger problem where if you trigger on a key and then delete the
key the trigger will still attempt to occur and possibly cause a core dump.
See CAVERN_irbKey_c.
Version alpha 1.6.5
New changes in this version:
-
During Initial synchronization, when links are formed for the first time,
the content of the linked keys are also checked in addition to the timestamp
differences.
-
LIMBO ZERO - an application template that puts multiple avatars in a virtual
world is now available in the templates directory.
Version alpha 1.6.4
New changes in this version:
-
In CAVERN when packets of data arrive each packet will spawn a thread to
handle it. When there are too many incoming packets too many threads are
created. At this point it is possible to max-out the OS' limit on threads
and crash Nexus.
To address the problem the member functions of CAVERN_irbKey_c: put(),
deliver(), import(), deliverIncludingPassive() now have the explicit ability
to choose whether the connected clients will trigger their respective callbacks
as a newly spawned thread or not.
-
Both -32 and -N32 versions of the binary libraries (libcavern.a, libcavern_n32.a)
and their respective CAVERN_MAKEFILE_INCLUDES_32 and CAVERN_MAKEFILE_INCLUDES_N32
have been provided. Please make sure to make a manual adjustment in the
Performer demonstrations provided.
Version alpha 1.6.3
New changes in this version:
-
The memory leak in Nexus' UDP has been patched. Max UDP packet size has
been turned up to 8K bytes. Note that when Nexus supports large packet
reassembly the limit on UDP packet sizes will be lifted.
Version alpha 1.6.2
New changes in this version:
-
Minor change. Added: CAVERN_irb_c::existsKey() that you can use to determine
whether a key has previously been defined or not.
-
Suspect there is a problem somewhere with Nexus not deallocating memory
for UDP packets. So to reduce this problem for now the UDP max packet size
has been reduced to 4K bytes.
Version alpha 1.6.1
New changes in this version:
-
Nexus upgraded to version 4.1.1.
-
Fixed a problem where opening a new channel that fails may sometimes crash
the program rather than properly return an error message.
Version alpha 1.6
New changes in this version:
-
Multicasting has been implemented. Multicast has the same packet size limit
as UDP (8K bytes so far). The new multicast capabilities are supported
by the following CAVERNsoft classes:
CAVERN_irbMcastChannel_c and CAVERN_irbMcastLink_c.
See also CAVERN_irb_c::createMcastChannel().
-
Now you can set the CAVERN_PORT environment variable as a quick way to
set the starting port number of CAVERN.
-
If you are running CAVERNsoft on an Octane you should consider applying
the following SGI pthreads patches: 2044, 2162, 2254.
Version alpha 1.5.1
New changes in this version:
-
CAVERNsoft has been returned to -32. We are abandoning -n32 for now due
to some problems with SGI's software.
-
UDP packet limit has been increased to 8K. Exceeding this will still crash
CAVERNsoft.
-
Added a CAVERNplus_callSequencer_c class to make CAVERNsoft a little easier
to retrofit into existing applications.
Version alpha 1.5
New changes in this version:
-
CAVERNsoft is now compiled with -n32 option so make sure to turn that switch
on when you compile your own code.
-
UDP has been activated using Nexus 4.1. UDP packets however are currently
limited to 1K byte in size. If you send anything larger it will crash CAVERN.
That's because Nexus crashes CAVERN. This hopefully will be fixed in the
future.
-
The requestRemote() member function in the CAVERN_irbLink_c class that
allows you to request data from a remote key now has both a BLOCKING and
NON_BLOCKING capability.
-
You may export a key to an output file using the export() member function
of the CAVERN_irbKey_c class.
-
The counterpart of dbdeliver, called dbget has been added to the tools
subdirectory. While dbdeliver lets you deliver a file to a remotely running
IRB, dbget does the opposite. It lets you fetch data from a remote IRB
and save it to a local file.
Version alpha 1.4.2
This is the same as version 1.3 except for the following changes:
-
Added key->import() to allow import of a file into a key.
-
Added key->allocDirect() allows alloc of a key of a specific size.
-
Added blocking and non-blocking options to key->put,deliver,deliverincludingPassive
functions.
This option only works for TCP. It is not possible and not a good idea
to implement
it for UDP as well since UDP does not even guarantee delivery anyway.
These were added because when you did a put followed by a commit
there was no guarantee of when the put would eventually be done delivering
the data. So the blocking is used to send a signal back saying it has been
delivered.
-
Changed cvrnMesg to cvrnPrintf for public use.
-
Added CAVERNplus_thread_c, CAVERNplus_condition_c, CAVERNplus_mutex_c -
a simplified C++ API for threads, condition variables and mutual exclusion.
-
Improved performance on database commits for large files.
-
Added a dbdeliver tool to let you populate a remote database. See Useful
Tips for more info.
Version alpha 1.3
This is a very very preliminary version of CAVERNsoft. More features will
be added in time. So far only the core features have been implemented.
The source code is also not as efficient as it could be but that too will
improve with time.
This version of CAVERNsoft was developed on the SGI under a pthreads
patched OS6.2. In the short term we will only support CAVERNsoft on the
SGI's. Successful tests of CAVERNsoft with Performer have been done on
O2's under OS6.3. If you plan to use CAVERNsoft with any form of SGI graphics
use only OS >= 6.3 as previous versions do not have a thread-safe OpenGL
implementation.
If you really really must patch an OS6.2 here are the patches:
140{1345}, POSIX libs/headers
1505, libc all-platform roll-up
1569 kernel all-platform roll-up (Indy/Indigo2)
This version of CAVERNsoft supports:
-
Reliable TCP.
-
Ability to arbitrarily connect with other CAVERN programs by opening channels
and linking keys across channels to synchronize data between local and
remote programs.
-
Ability to commit keyed data to local persistent data store.
-
Ability to take a UNIX file and make it part of the CAVERN data store.
Currently the data store is built on top of the UNIX directory and file
structure. When keys are defined all of the key's data is loaded from file
and held in main memory until the application undefine's the key. So although
your data store can hold as much as your file system is able to hold, the
amount of data that you can manipulate at a time is limited by the amount
of main memory you have. This simple database scheme will soon be replaced
by PTool.
It does not support:
-
Unreliable UDP. Argonne has only just released Nexus with UDP and it is
somewhat buggy. So CAVERNsoft has been hardcoded to bypass this and use
reliable protocol any time unreliable protocol is chosen. In your coding
you should go ahead and use unreliable as needed so that when Nexus gets
fixed everything will drop into place.
-
Multicast- Nexus does not support this yet but Argonne assures me that
this will be implemented soon.
-
Locking- no locking of keys is possible. The semantics for a locking scheme
has been designed but not implemented yet.
-
Higher-level templates- currently only an avatar template has been implemented.
More will come.
-
The PTool persistent database- current CAVERNsoft does not use PTool. But
now that the alpha version of CAVERNsoft has been implemented it will make
the requirements of PTool easier to specify.