Change Log - laforge49/Asynchronous-Functional-Programming GitHub Wiki
##Unreleased (Release 2.0.0?)
- Reworked Mailbox and Actor to separate concerns and to make some speed improvements.
##Release 1.3.3
- Critical bug fix: RecordUpdate now checks the results of RecordExists instead of just calling it.
- ConcurrentLinkedBlockingQueue is a ConcurrentLinkedQueue with a take, with semaphores used only when the queue is empty.
- The Mailbox class has been replaced by the Mailbox trait and the BaseReactorMailbox, ReactorMailbox, AsyncReactorMailbox, BaseThreadMailbox, ThreadMailbox and AsyncThreadMailbox classes. Now when the target mailbox is empty, a thread switch is not used when sending a message from another mailbox. This saves about 5 microseconds per message.
AsyncReactorMailbox has the same behavior as the old Mailbox class, but AsyncReactorMailbox and AsyncThreadMailbox should be used only by an actor which performs (blocking) I/O. Otherwise use ReactorMailbox or ThreadMailbox. (A Thread is perhaps a little faster than a Reactor, but requires a good chunk of RAM for its stack. But note that Thread mailboxes are still experimental.)
##Release 1.3.2
- Log files are now properly flushed after each journal entry is written.
- The flushLog property is set to "false" to turn off the flushing of the log file after each journal entry is written.
- Log file output is now buffered.
- RecordUpdate uses opportunistic locking to prevent aborting after altering the datastore.
- RecordExists and RecordGet now always do only 1 query.
- Swift datastore requires flushes only on the transaction log for ACID assurance--outdated datastore is updated using the old log file on restart.
##Release 1.3.1
- BugFix: RecordUpdate was not updating the record timestamp, causing record locks to fail to detect changes.
- RecordLockTest
##Release 1.3.0
- Bug fix in Block.writable.
- Bug fix in IncDesNavMap.
- Bug fix in DbSeq--pathname is no longer ignored.
- RootBlockComponent sends an InitDb message to initialize a new database.
- TransactionsComponent renamed to SmallTransactionsComponent and has a dependency on the new NoDbInitializationComponent.
- NoDbInitializationComponent handles the InitDb message, but performs no initialization.
- Record extends IncDesIncDes, adding a persistent timestamp.
- IncDesStringRecordMap is a nav map with string keys and Record values.
- UpdateTransactoion and UpdateContext now carry the timestamp of the transaction.
- IncDesNavMap now handles PutString, PutInt and PutLong messages.
- IncDesNavMap and IncDesList now handle the GetValue2 message.
- The SmallRecordsDataStore supports both batch updates and opportunistic locking.
##Release 1.2.5
- Transactions are now logged by the transactinProcessorComponent only on successful completion.
- The log files can now be used to rebuild the database.
##Release 1.2.4
- DbIntSeq[V], DbLongSeq[V] and DbStringSeq[V] provide sequences across the contents of the database.
- A transaction log is now provided.
##Release 1.2.3
- Critical bug fix: stringLen in incDes package.
- GetRequest and SetRequest now work with IncDesNavMap and IncDesNavSet; GetRequest now works with GetRequest.
- SetRequest now makes a copy of the IncDes value, allowing it to be used in other requests.
- SizeRequest returns the size of a collection.
- The process method in the GetRequest and SetRequest companion objects has been renamed to apply.
##Release 1.2.2
- Renamed SimpleNoLogDataStore and SmallNoLogDataStore to SimpleNoLogStringDataStore and SmallNoLogStringDataStore respectively.
- Moved GetRootStringRequest and SetRootStringRequest to package org.agilewiki.db.transactions.rootString.
- New: GetRequest, SetRequest, SmallNoLogComponentFactory, RootRequestTest, Resolve and Assign.
##Release 1.2.1
- Factory.addComponent now only takes one argument.
- Simplified GetRootStringRequest and SetRootStringRequest.
- New apply method on Chain for accessing results.
- New ChainFactory, a subclass of Safe.
- Operations in a chain are skipped if either the actor or message evaluate to null--providing for conditional execution.
- Simplified SetRootStringRequestComponent and GetRootStringRequestComponent by using ChainFactory.
- Fixed a bug in Responder.exceptionHandler.
- Db project now supports robustness.
##Release 1.2.0
- Properties request class renamed to PropertiesSeq.
- New Properties class extends TreeMap[String, String].
- Chain now supports result passing and the use of anonymous functions for messages.
- The requiredService method now also checks the actor's superior for the presence of the service.
- Initial release of the Db project (persistence).
##Release 1.1.2
- Actor now has an open method.
- CompositeFactory now takes an optional actorClass parameter.
- The actor class can now be specified for system services and subsystems.
- ActorRegistry now closes the registered actors when it is closed.
- Subsystems now implement IdActor and can be created with an ActorId, allowing them to be registered with an ActorRegistry.
- GetProperty(name: String): String now returns null if system services are not present or if the properties component can not be found.
- GetProperty now has required, string and int methods.
- A chain of operations can now be composed and subsequently executed.
- Started work on the incDes.blocks package.
##Release 1.1.1
- Subordinate Component dropped from IncDes. Writable and Change messages replaced by methods.
- Query and Update transactions now create a QueryContext or UpdateContext respectively. (Subclasses of TransactionContext.)
- Writable validates that the transaction context, if provided, is an UpdateContext.
- Properties service for system and subsystem configuration.
##Release 1.1.0
- Future now supports transactions.
- Interop class supports interaction between Scala Reactors and AsyncFP Actors.
##Release 1.0.1
- Dropped bound from the arguments of Bound.asyncSendReq.
- Bug fix: Transactions must be asynchronous. (New method: Transaction.func)
##Release 1.0.0
- Safe.func now takes the target actor as the first parameter.
- Mailbox now supports transaction context.
- Actor now supports many reader / single writer transaction processing.
##Release 0.6
- Actors and components can now use bindAsync to force a class of messages to be run asynchronously. As a side effect, synchronous message processing is now a bit faster.
- An actor now passes unbound messages to its superior, when present.
- Subsystems are implemented using hierarchical dependency injection.
##Release 0.5
- FactoryRegistryComponentFactory.getFactory now throws an exception if the factory id is unknown.
- FactoryRegistryComponent calls configure on all registered factories when the component is opened.
- ListSeq now checks an outdated flag on current and next operations.
- Initial release of IncDes.
- Sequences which wrap other Sequences use the systemServices of the sequence they wrap.
##Release 0.4
- Bug fix made to FactoryRegistry--system services was not being injected.
- IdActor, rather than Actor, now implements ActorId.
##Release 0.3
- Actor constructor no longer has any parameters. They have been replaced by the setMailbox and setFactory function, which can only be called before the actor is opened.
- Component constructor no longer has component factory parameter. This has been replaced by the setComponentFactory function, which can only be called before the actor is opened.
##Release 0.2
- Actor.id, Actor.setSystemServices, Actor.RequiredService, Responder.bind and Responder.bindSafe may not be called after the actor has been opened, i.e. after a message has been received.
- Asynchronous sends are blocked and sent when there are a lot of messages for the same mailbox or when the inbox is empty, resulting in a 5 fold increase in throughput.
##Release 0.1
Initial release.