|
one.world Release Notes
Release 0.7.1
1/28/2002 This is a bug fix release. If you use the source release, you need
to copy all files in the
Console output is now exposed through the Shell.console field. This
field can be used instead of We added a new configuration parameter,
"
Release 0.7
9/21/2001 This release includes performance improvements, bug fixes, and some
API changes. If you have used a previous distribution of
one.world, make sure that you rebuild from scratch and
completely delete the old tuple storage files and directories before
running this release. If you use the source release, you need to copy
all files in the Known issues The issue with Window shutting down networking when the network connection goes away has not been resolved (see release notes for 0.6). We have not tested one.world with Sun's JDK 1.4 beta 2 release and do not know if the missing classfiles are now part of that release (see release notes for 0.6). Tuples The Tuple.validate()
now validates both the structure and the contents of a tuple. As a
result, it now throws a TupleException
instead of an InvalidTupleException. The
Structural validation has been moved into Type, which will be expanded in a future release to implement customized and faster tuple serialization. Environment migration Environment migration has been rewritten from scratch to not break down when migrating environments with lots of tuples. As a result, the MovingProtocol has been changed. The new version is incompatible with earlier releases. Operations Operations now use a single timer for all request/response interactions managed by one instance. This avoids out of memory errors for large numbers of events managed by the same operation. Performance We have profiled large parts of the core architecture and the one.radio applications and implemented many performance optimizations throughout the system. The optimiziations include:
Web server The web server now supports caching, but it does not yet handle large files. To serve large files, increase the chunking threshold before importing files.
Release 0.6
8/30/2001 This release includes several API changes, new features,
considerable bug fixes, and performance improvements. If you have used
a previous distribution of one.world, make sure that you
rebuild from scratch and completely delete the old tuple storage files
and directories before running this release. If you use the source
release, you need to copy all files in the Known issues Currently, each event managed by an operation has its own timer for detecting time-outs. This causes out of memory errors when large numbers of events are sent through operations in rapid succession. In the next release, each instance of operation will use a single timer to avoid this problem. Datagram I/O channels have some performance problems that may cause dropped packets when many packets are received in rapid succession. For unknown reasons, Windows seems to shut down networking when the network connection goes away. This breaks REP and discovery. We are still investigating a possible work-around. Sun's JDK 1.4 beta release seems to miss some classfiles needed for serialization and, as a result, one.world does not run on that release. Tuples Tuple.clone()
now returns a complete shallow copy of a tuple and does not replace
the ID anymore. To actually create a new tuple with the same values, a
caller of this method needs to replace the ID and meta-data fields as
well as copy any nested tuples. The superfluous
Components Imported and exported event handlers can now be declared after a component has been created and when it is already in use. Furthermore, imported and exported event handlers can now be removed from a component by undeclaring them. Concurrency domains The number of threads used by a concurrency-safe concurrency domain is now dynamically adjusted by a controller based on the environment's perceived load. This means that applications that are mostly idle only use one thread and applications that are very busy can use up to 20 threads. The root environment now contains nested concurrency domains to isolate some services from the root environment's main concurrency domain. Their use avoids breaking the root environment into several environments and thus introduces a form of lightweight environment. Environment migration A bug in migration was fixed and copying of environments works again. Local migration of environments now goes through a checkpoint (just like local environment copying and remote migration) instead of just changing some internal pointers. This ensures that references to resources outside the migrated environment tree are properly released. Tuple storage Fixed several event handlers so that they correctly return an exceptional event when receiving an event they don't understand (rather than silently dropping it). Fixed a concurrency problem with query iterators. Structured I/O networking Network I/O channels now use their own nested concurrency domains, so that all network writes occur within a single thread. This means that root environment threads will no longer block while trying to write to TCP sockets. Remote event passing The remote event passing system now delivers events within a single
instance of one.world without serializing the events or sending
them over the network. This optimization may be disabled by setting
the " Remote events are now annotated with the port number of the source remote event passing system (see Constants.REQUESTOR_PORT). This information helps in reusing bidirectional TCP connections, rather than creating a separate connection for each direction. Also, a bug that caused REP to hang when connecting to an unresponsive port (such as port 23, the telnet port) has been fixed. Discovery Discovery now supports reverse queries. If the RemoteDescriptor.descriptor
field for an event handler being exported to REP is a query, the query will be
executed on late binding events sent through discovery and matching
events will be delivered to the exported event handler. The query is
executed on the inner event, not on the enclosing RemoteEvent. Bindings
with reverse queries behave exactly like normal discovery bindings,
though they are guaranteed to be matched after all normal forward
queries. However, if the new RemoteDescriptor.snoop
field is Note that previous releases of one.world cannot interoperate
with this release, because (in part) of the addition of the
Applications using discovery will no longer see exceptional events containing unknown resource exceptions for events sent to stale discovery bindings. Recovery from a discovery server failure should be faster. Among other things, when the system with the discovery server shuts down, it calls an election and waits for the result before exiting. Discovery elections are somewhat more resilient to dropped packets. The performance of discovery queries was improved. In particular,
all discovery bindings with the same resource (as determined by Tuple.equals(Object))
are merged into a single discovery server entry. This means that
Importing and Exporting Data Large files, such as music, are now imported as a chain of chunks and reassembled into a single file when being exported. Constants.CHUNKING_THRESHOLD determines the threshold for breaking up a single file into many chunks. The converter interface has been modified to support mappings between a single file and several tuples. Application Support The new one.gui package provides support for building GUI-based applications in one.world. Notably, Application significantly simplifies the implementation of an application's main component, and GuiUtilities implements several static helper methods for managing GUIs. The new Clock and Counter2 toy applications
illustrate their use. Note that Furthermore, the RemoteCounter toy
application has been rewritten as a one.radio Chat has been reimplemented
to use the new helper classes in one.radio now supports streaming audio, both from sound data
stored in environments and captured from a microphone. Audio support
has been integrated into A bug in the Linux JavaSound implementation disables full duplex audio. Therefore, attempting to capture audio from the microphone in Chat under Linux will result in an exception. The new Emcee application
provides a simple and convenient user interface for managing users and
their applications. It provides a user interface for several root
shell operations (such as running an application, checkpointing an
application, or restoring a checkpoint). Furthermore, it supports the
moving or copying of applications between users, simply by dragging an
application's flag icon ( Web server The new one.net.http package implements a web server. The web server does not yet implement caching for frequently accessed documents. Furthermore, it does not yet handle chunks. To serve large files with the web server, increase the chunking threshold before importing the files (see above under importing and exporting data). Code cleanup In preparation for the elimination of
Release 0.5.1
7/24/2001 This is a bug fix release. If you have used a previous distribution
of one.world, make sure that you rebuild from scratch and
completely delete the old tuple storage files and directories before
running this release. If you use the source release, you need to copy
all files in the The following bugs are fixed:
This release also adds a "
Release 0.5
7/18/2001 This release includes several API changes, new features, considerable bug fixes, and performance improvements. It also includes one.radio, a chat application running in one.world. A binary distribution is now available as well, simplifying the process of installing and running one.world as well as one.radio. If you have used a previous distribution of one.world, make sure that you rebuild from scratch and completely delete the old tuple storage files and directories before running this release. If you use the source release, you need to copy all files in the
Security one.world now requires a Java SecurityManager
to run (though, the regression tests in the As a result of enabling security, one.world now needs to be
invoked through a script ( Protection domains Protection
domains are now functional. Each environment either has its own
protection domain or inherits the parent environment's protection
domain. The Most operations on environments are restricted to work only on the root of a protection domain. For example, it is impossible to checkpoint or move a partial protection domain. Each protection domain has its own class loader and events passed between protection domains are copied, resulting in true call-by-value semantics for event passing between protection domains (immutable objects are passed by reference). The class loader currently loads from the local class path. A future release will change this to load code from the environment hierarchy itself. The unload operation can be used to forcibly unload all code from a protection domain. It is thus possible to load and run recompiled application code without restarting one.world. Note that core code, that is all code in the
Tuples To make efficient copying of tuples passed between protection
domains feasible, the valid field types for tuples have been
restricted; see Tuple for
details. Because of these restrictions, a box can now be used to embed
arbitrary objects in tuples. The Event validation AbstractHandler
does not automatically validate events anymore before invoking the
Time Timer now implements a synchronous interface in addition to the asynchronous interface. All core code, including LeaseMaintainer, now uses the synchronous interface, because timing asynchronous interactions through an asynchronous interface does not work reliably for some boundary conditions. Each environment has a default timer, which can be conveniently accessed through Component.getTimer(). Structured I/O Queries on the fields of
nested tuples are now implemented. For example, to match tuples with a
" one.world now requires Berkeley DB version 3.2 or later to
run. Version 3.2 contains a fix for the Java log cleaning bug present
in version 3.1. Old log files are now always deleted and the
" OptionEvent and FlushEvent provide a new interface for relaxed durability when writing to an environment's tuple store. However, they are not yet supported by the current implementation of tuple storage. Several changes have been made to NetworkIO to improve robustness and performance. Object streams are now buffered to reduce event passing latency. They are also reset after each tuple to ensure that objects sent repeatedly will be reserialized on each send. A timeout has been added during object stream establishment to reduce vulnerability to misbehaving clients. Remote event passing
RemoteEvent now includes a datagram flag, which is used to request unreliable delivery of events via UDP. Also, two bugs were fixed, one that caused dangling leases and another that resulted in incorrect connection caching in the case of failed connection attempts. Discovery one.world nodes on a local network now automatically elect a
discovery server amongst themselves. A node may still be manually
configured as a discovery server by setting the
" Discovery bindings are made in all servers detected on a network, and when a new server appears on the network all existing bindings are added to that server. When the primary discovery server fails, clients will automatically switch to another discovery server for resolution if available (and elect a new one if not). However this process is slower than desired in the current release (on the order of several seconds). This will be improved in the next release. Note that a BindingResponse when exporting an event handler to discovery does not indicate that the binding has been propagated to all discovery servers.
Root shell The option syntax for many commands has been simplified by removing
the need for an explicit " The logic/operation pattern The logic/operation
pattern can make it easier to develop asynchronous code. It is now
supported by the ComposableHandler
and Operation classes
in the A bug in the current implementation of Code cleanup The overall goal of the code cleanup is to remove clutter from the source tree. Unused classes have been removed, small packages have been consolidated into larger ones, and classes not needed for one.world to run have been moved outside the core packages. The Skeletor has been moved
from the The Minimum has been moved
from the
Release 0.4
2/22/2001 Major changes are summarized by package / functional unit. This release includes important bug fixes as well as feature improvements. Core Several bug fixes for remote moving and copying. Event delivery to linked monitor event handlers is now working. Exceptional events indicating that an event queue is full are now correctly delivered. Check-pointing has been made more failure-resilient. Migration between several instances of one.world running on the same node is now possible. Structured I/O The Structured I/O interface was changed slightly in this release:
The package documentation for one.world.io has been improved. A couple of bug fixes for tuple storage. In release 0.3, a bug in the Linux HotSpot JVM prevented sockets used by NetworkIO.Client from being closed before the JVM exits, even if the governing lease is canceled or expires. (See the bug report for more information.) This release includes a workaround for the Linux JVM bug. The sockets at both ends of network I/O channel will be closed when the lease expires or is canceled. Remote event passing REP now queues remote events while waiting to establish a connection to a remote host. In the previous release, if multiple events directed to the same remote host were sent in rapid succession, a connection was established for each event. Early- and late-binding service discovery are now supported through
resolution events and discovered
resources, respectively. Registration of event handlers with a
discovery server is performed using export descriptors. The core now
includes a DiscoveryClient
component that manages DiscoveryServer
interactions. A discovery server can be activated on a node by
setting the Root shell Added the The Added the ability to telnet into one.world as an alternative
to running the root shell from
the local console. The " Benchmarking Added micro-benchmarks to compare the performance of structured I/O
(networking and storage) as well as remote event passing with plain
Java sockets (for networking), the
Berkeley DB and T Spaces (for
storage), and Java
RMI (for remote event passing). The one.world benchmarks
are located in the appropriate packages; their class names start with
Networking benchmarks were updated to correctly perform latency and throughput benchmarks for both Java and one.world. Known problems:
Three benchmarks related to tuple storage performance were added. These tests are micro-benchmarks on one.world tuple store performance, Berkeley DB performance, and IBM T Spaces performance. The Berkeley DB tests are designed to determine the overhead added by one.world to plain Berkeley DB performance. The T Spaces benchmarks are designed to provide a point of comparison with a (somewhat) similar system. Documentation for these benchmarks is in the package documentation for one.fonda. The T Spaces benchmark is not built by default, since it
requires T Spaces. To build it, you must install T Spaces,
place the BenchmarkREP implements latency and throughput benchmarks for remote event passing. BenchmarkRmi provides similar benchmarks for Java RMI, allowing a comparison.
Release 0.3
2/2/2001 Major changes are summarized by package / functional unit. This release marks the implementation of all operations on environments and a considerable increase in stability, notably for structured I/O over TCP and remote event passing, as well as usability, making small additions through-out the code base. Core Environments can now be moved and copied to remote nodes. The protocol to move environments is documented in MovingProtocol. Added the accept request event to make the acceptance of a moving environment tree explicit. The mover application illustrates environment migration by repeatedly moving between two or more nodes in a round-robin fashion. Queued event handlers make it possible to give certain events priority. Changed the implementation of environments to use them, which makes one.world more stable under heavy load. Structured I/O Several bug fixes for tuple storage. Cancelling a lease for tuple storage now cancels all on-going query and listen operations initiated through the same binding. Furthermore, a resource revoked excecption is sent to event handlers processing the results of such a canceled listen operation. Added option to automatically remove old log files from the tuple
store by specifying " Communication channels over TCP, as implemented by NetworkIO.Client,
have undergone a major semantic change. Previously, tuples were
silently discarded if received while no input requests were pending.
Now, tuples will be consumed only while input requests are pending.
That is, if a Furthermore, many exceptions on the underlying socket are now correctly treated as fatal, resulting in the resource being revoked. Finally, we have eliminated a major timing bug that caused the
Unfortunately, fixing this bug exposes a bug in the Linux HotSpot
JVM: blocking read and accept calls on sockets are not interrupted by
the socket being closed. (See the bug
report for more information.) Therefore, sockets used by
Remote event passing REP now uses retries when sending events to remote systems; several small bugs were fixed in the process of adding this feature. Important constants have been exposed in Constants, and the documentation has been improved. Utility functionality Added four new methods to AbstractHandler to
respond to remote events. Made Synchronous.ResultHandler
public and added a Node information Added methods to SystemUtilities to access the current uptime, total and free memory, the current number of threads, and the IP address. Added support for determining the performance of the local JVM, based on the embedded CaffeineMark benchmark. Root shell Renamed the Benchmarking Initial network benchmark code has been added to the source tree but is not yet functional. A full set of micro-benchmarks will be part of the 0.4 release.
Release 0.2
1/22/2001 Core Several bug fixes and performance improvements in the
Application initializers may throw any Java throwable to signal that they could not properly initialize the application. The environment's imported event handlers are now properly unlinked on an exceptional condition. Structured I/O The directory structure for tuple storage has changed. You must remove the contents of the tuple store directory before running release 0.2. Leases on tuple storage are now properly revoked when an
environment is deleted. However, pending read, listen, and query
operations are not canceled. In the next release, they will send an
exceptional event wrapping a
For communication channels, "localhost" is now interpreted as the default IP address of the local node and not as the loopback interface. Various bug fixes for structured I/O and its regression tests. Remote event passing The Streaming media The new
Release 0.1
1/4/2001 The following features are not implemented.
Several public methods in the core classes are privileged and perform access checks to ensure that they are not called by applications. However, the current code base has neither been tested with Java security, nor have we devised appropriate security policies. Remote event passing A known problem is that a remote session will cease to function after several minutes, as internal leases expire. The system does not currently include any form of distributed garbage collection. An event handler may be destroyed by Java's local garbage collection system even if a remote node holds a reference to that event handler. The interface will be changed to incorporate some form of distributed garbage collection, possibly including the attachment of leases to the stubs packaged in events with remote sources. |