Last updated at 4:06 pm UTC on 29 July 2015
Magma 1.4 released on December 28th, 2012
Magma 1.4 brings heightened levels of stability, robustness and performance over its predecessor. Applications just run better, faster, with better memory management, usability and performance. The change-log has all of the gory details.
Magma 1.3 released on December 8th, 2011
- Serializer Upgrade
- BlockClosures (Contexts and CompiledMethods too, of course), can now be stored in the database, even with references to inst-vars, self, temps or globals.
- Split-Ordered Lists
- Tom Rushworth developed a fantastic Split-Ordered list implementation for Squeak. Working closely with Tom, this package has been extended in Magma to support very large SOL collections, implemented as a MagmaSolHashTable. Thank you Tom!
- The MagmaSolHashTable is actually a fairly primitive collection, and was used as the basis for two new collections: A MagmaHashTable and a completely new implementation of MagmaDictionary which is much faster than the old one (almost as fast as a preallocated dictionary).
- Full Monticello Model
- When using Magma as a Monticello repository the package versions are not zipped but stored directly in the repository as native instances of MCVersions, MCPackages, MCInfos, MCDefinitions, etc. All of these original MC object instances are canonicalized so there is only ONE copy of that MCMethodDefinition from 2002 which is shared rather than copied in every version since. MCPackages are also canonicalized, as is all ancestry! It also integrates the ability to instantly browse versions of methods throughout entire repository history.
The WriteBarrier is now on by default, so nothing needs to be done to enjoy the speed up.
- WriteBarrier Resurrection
- After two years dormancy, Avi Bryant's original WriteBarrier has been resurrected for use in closure/Cog images. Its original dependency on NewCompiler has been removed. With both the WriteBarrier and Cog, the MagmaBenchmarker reports a new record maximum commit rate – 456 commits per second !!
- Proxy Transparency
- A new extension to the WriteBarrier should now alleviate the need to send #yourself to primitive arguments! Primitives which require arguments are now overridden in the anonymous subclass so that the arguments will automatically be ensured to be fully-reified for the super call.
- For performance, TimeSpans, Durations, DateAndTimes, Points, Intervals, Colors are now immutable. Strings are also immutable by default, but now a custom ImmutabilityStrategy may be specified, providing fine control over immutability in case mutable Strings are needed (or if other objects can be made immutable).
- Platform Independence
- Magma 1.3 runs on Squeak 4.3 and Pharo 1.3. All of the packages have been renamed in accordance with contemporary package naming conventions employed by most other active Squeak and Pharo projects. Platform-specific behaviors are now in platform-specific packages (named with "-Squeak" or "-Pharo"). The package hierarchy is documented at http://wiki.squeak.org/squeak/6178.
- Many minor cleanups, fixes, and usability improvements.
Magma 1.2 released on April 19th, 2011
- The impact of the problem with finalization was finally understood, and neutered.
- Magma now only bulk-becomes Proxies from the last 30 seconds, rather than when each proxy is encountered.
- Performance improvement for adding to a MagmaArray while in a transaction.
- Optimization for MagmaCollection>>#size, when a lot of uncommitted adds or removes have occurred.
- Optimization for #sortObjects: that does not create a sorted-collection.
- All Numbers are now immutable in Magma, including Fractions.
- Introducing MagmaPreallocatedDictionary, the fastest possible implementation of a large Dictionary for Magma.
- NOTE: The current MagmaDictionary will be replaced in Magma 1.3, do not use it.
- Measurement: Added in two new statistics; objectsReadPerSecond and objectBytesReadPerSecond.
- Magma can now commit single objects (i.e., Strings or ByteArrays) larger than 16MB.
- Improved the use of MagmaForwardingProxies, which are "bookmarks" to objects in another repository, so that federated repositories can operate indpendently.
- Added MagmaSessionRequest class>>#signalRefresh, as well as MagmaSessionRequest class>>#signalNewGlobalReadStrategy:, useful methods to signal from your domain, but which are harmless when Magma is not installed.
- Fix to allow indexes to be removed and re-added in the same commit.
- New convenience methods for establishing highly-available servers.
Magma 1.1r2, released July 29th, 2010
repository directory, to indicate the repository is open. The file is
- All underscore assignments have now been updated to ANSI assignments.
- When opening the server, a file called "_open" is created in the
deleted when the repository is closed gracefully. This is intended to
help protect from accidentally letting two OS processes open the same
that it inherits the properties of Magma's LargeCollections, such as
- Resurrected MagmaDictionary! It is just like a Dictionary except
size and concurrency.
the "-vm-display-null" option.
- Added Collection>>#asMagmaArray and MagmaArray>>#add:.
- Added check for an additional way to run Squeak in headless mode:
domains may signal new ReadStrategies to any listening sessions.
- Added MagmaSessionRequest class>>#signalNewReadStrategy: so that
location and, if so, use that one. Otherwise, create and answer a new one.
- Added MagmaLocalLocation>>#findSession, a convenient counterpart to #newSession that first checks there is already a session open on that
references to arguments, not "self", any instVars or globals).
- Support for persistent, simple BlockClosures (e.g., with only
depending on whether the new Weak-Finalization mechanism from Igor is
- Choose automatically between an appropriate MaDictionary subclass,
- Several other minor fixes.
Magma 1.1r1, released on April 20th, 2010
Squeak 3.10 and 3.9). Loads into all images cleanly, with no more
- Compatible with Squeak 4.1 and Pharo 1.0 (also compatible with
warnings in Pharo.
can't be used, just don't rather than intrude on the user.
- No longer necessary to disable WriteBarrier to run the tests; if it
backup on the server in the same directory as the existing repository,
- Added MagmaSession>>#fullBackup, for making a quick, convenient
but named with its commitNumber as an extension. This is useful
insurance for when you're about to run, say, a domain migration
can be written to to signal MagmaSessionRequests without having to
- Fix for case using relative-path local locations.
- Moved MagmaSessionRequest to Ma base additions so that applications
load all of the packages associated with Magma.
distribution of keys and number of duplicates, for optimizing indexes.
- Added MaHashIndex>>#keyCounts to help developers determine
- Some other minor fixes and optimizations.
Magma 1.0r44, released on March 3rd, 2010
- Made several HA fixes and improvements, many identified by Bart
Gaquie by testing with more than a two-server Magma Node. Many thanks
Fraction instead of a reduced one. This convey's more information;
- Updated MaQueryExecutor>>#fractionComplete to answer an unreduced
since the denominator represents the total number of elements in the
final result. Thanks again to Bart Gauqie.
well-behaved application much freer access to the "luxury" query
- Upgraded MagmaCollectionReader>>#release to allow give a
features of MagmaCollections. It is essential for applications
employing luxury query features of Magma for ad-hoc querying, to
server can be freed.
- release the Reader returned from the query so that resources on the
- Now properly truncating the applied.images file, so it doesn't grow
never been set (new repository) or was a different local location,
- Now, when a repository is opened locally, if it's location has
then update it to the new aMagmaLocalLocation. If it was formerly a
network-hosted server, do not update since we could be here simply
just for re-opening that repository. So, to go from a remote
repository to a local one, you have to manually update the node's
since it is sometimes checked for special-purpose server housekeeping.
- Server no longer allows any clients to log in with the system name,
- Updated MagmaSession's standard printing method, again!
- Added MagmaCollectionReader>>#sortBy:makeDistinct:descending: and
- Made MaRepositoryDisconnectRequest asynchronous, it now returns considerably faster!
- Fix for a recent MagmaCollection optimization.
- Removed hard-reference to OSProcess.
- Patch for #removeListener to avoid DependentsArray problem.
- Fixed a ReadStrategy regression.