Object identity

Chris Muller asqueaker at gmail.com
Tue Jun 12 03:32:49 UTC 2007


Hi Florian, this is an interesting problem.

First to answer your question, Magma identifies an object as already
in the repository if it has a "permanent" oid.  This is an oid range
between MaOidCalculator #firstUserObjectOid and #lastUserObjectOid.
The #hash of an object never comes into play to determine this, or
anything in Magma for that matter.

One way to get your large object-model into Magma would be to change
the method MaObjectBuffer>>#ensureSpaceFor: to allow more than 10
megabyte serializations.  I only suggest this only because it is an
arbitrary limit and it looks like your model is right there just over
the limit.  Change it to 50-meg on the fastest computer you have, It
should work.  Submit the commit and let it run all night.

Another option would be to temporarily change your Players to
reference the other players only logically; by some temporary id or
something.  Once you get them loaded into Magma, then reset the
references back to the actual objects.

Note #maTransientVariables is available to implement on Player so it
will not serialize those variables, so you could actually ADD a new
logical reference, if necessary, and make the hard player reference
transient (temporarily).

Please let me know if these ideas are feasible.

 - Chris


On 6/10/07, Florian Minjat <florian.minjat at emn.fr> wrote:
> Hi,
>    I am trying to transfer a big object hierarchy to Magma : 110100
> objects in 9004144 bytes.
>    The basic structure is composed of ~70 Players with a lot of stuff
> inside. Each players can have some Letters which references other
> Players as sender or recipients.
>    The problem is that I can't submit one player to an empty Magma
> repository without letting Magma insert all the references Players.
> And the resulting transaction is too big, causing an error. So I
> separated all the Letters from the Players, inserted the players
> (~50min) and then tried to insert the Letters. But I close the
> connection to the magma repository between the two, so Magma tried
> again to load all the references Players.
>    So here is my question : how does Magma identify a given object as
> already inside a repository ? Does it compare the hash of the objects
> and I just need to redefine the hash method of Players ?
>    Each try is quite long so I would like to understand a little more
> of the inner mechanisms of Magma instead of trying numerous times.
>
> Florian
> _______________________________________________
> Magma mailing list
> Magma at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/magma
>


More information about the Magma mailing list