r42Gamma2

Chris Muller asqueaker at gmail.com
Sun May 31 22:49:41 UTC 2009


I have just posted Magma r42Gamma2 to SqueakMap and SqueakSource with
a significant fix for the

  "[SomeClass] cannot have variable sized instances"

problem.  There were two reports of users experiencing the message,
but I was not able to determine the root cause from the information
given.  Earlier today however, I experienced the problem myself and
was able to debug and fix the problem.  A detailed description of the
problem is at the end of this message.

I strongly recommend anyone using any version of r42 to upgrade to
this latest r42Gamma2.

If you have experienced the "[SomeClass] cannot have variable sized
instances" message, then three classes in your class-map need to be
restored.  However, the easiest way is to go back to the backup
repository that it was before it was opened by r42 on-line server.

If you have an important (i.e., production) repository with no backup
prior to that repository being opened for on-line service by r42,
please contact me via private e-mail.  The procedure for fixing is
tedious, I'd rather not have to explain it unless absolutely
necessary.

 - Chris

Description of the problem:
When a repository is created but never been opened on r42 via a
MagmaServerConsole, it won't have the following remote-server related
classes in its class-map:
	MagmaRemoteLocation, MagmaLocation and MaServerLocation
In this case, if the repository was then opened for remote service,
AND there were domain classes not present in the server image (which
is very common, since there is no need for the domain classes in the
server image) the bug in rebuildTransientClassMaps would cause the
'nextClassId' to not be properly updated, resulting in the three
above-mentioned Magma classes to overlay the last three classes in the
classId map!  This means if those three classes are concrete and have
instances in the repository, they won't be able to be properly
materialized.

The patch involves either rolling back the repository to just prior to
that commit, or recovering the buffers for the original three
class-definitions and restoring them.


More information about the Magma mailing list