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.